Python 裡為什麼函式可以返回乙個函式內部定義的函式?

時間 2021-05-31 19:11:03

1樓:鋼鐵直男劉昊然

自界說函式的呼叫是經過訪問自界說函式名來完成的, 變數=函式名(參量1,參量2,...) 明顯,與呼叫子程式的辦法不同,自界說函式的呼叫遵從內部函式(如Sin、Sqr、Tan等)的呼叫規矩,自帶參量也有必要用圓括號括起來。

參量可所以常量、變數、表示式或陣列變數名。資料的型別應與子程式界說時的參量型別一致。當子程式的參量傳遞方法為傳址(ByRef)時,呼叫時的參量有必要是變數,不但是常量和表示式。

例如: a= Myfunction(5,10,1)b= Myfunction(x,y,z)

若為陣列資料,則陣列名後應跟一對圓括號。

函式回來的值,是在自界說函式過程中對函式名所賦的值。若沒有對函式名賦過值,則依據函式型別回來體系預設值。如數值型函式回來0;字串型回來值為空(即" ")。

2樓:海邊的卡夫卡

內聯函式在界說時,除了前面要加上line要害字(加在函式型別要害字前,用' '離隔)外與其他函式沒有什麼大的差異。

內聯函式呼叫時與其他函式寫法相同。要害是在呼叫它的當地,一般是由編譯器直接插入函式體而不是轉向函式去履行,再回來,以削減體系時空開支。正因為這個原因,界說內聯函式時,其體內是不能運用迴圈、swhice和雜亂if巢狀句子以及遞迴技術的。

所以,內聯函式體應該是體小精緻簡略的句子構成的常用段,以削減程式設計師的重複勞動……但假如你寫得不得體也不妨,編譯器那時就把這個不得體的內聯函式徹底按一般函式處理了。

3樓:mwish

3. Data model - Python 3.6.4 documentation

且看官方文件的物件模型,可呼叫物件在 Python中實際上是「一等物件」,和所謂的整數 None 有著同樣的地位。那麼,我們可以反悔自己定義的物件可以返回整數可以返回None,我們也可以返回在這個意義上對等的「函式」吧。

4樓:安江澤

題主遇到的這個問題很典型,就是把修飾器當成了包裝器, 認為呼叫 useful 前先呼叫 addspam。其實 useful 不是被 addspam 包裝了,而是替換了。呼叫 useful 呼叫的就是 new。

餘下的 fn 指向原來的 useful, 才需要第一類函式、作用域繼承等知識點來理解。可變引數 *args 則是干擾的另外乙個知識點,替換成 x, y 就行了。

5樓:

Python裡面的@只是乙個syntax sugar而已,在你宣告useful的時候,interpreter檢查到你有外面有裝飾器@addspam的存在,這時候你就可以大致理解成直譯器做了以下的手腳:

useful

=addspam

(useful

)所以你以後呼叫useful的時候,你呼叫的其實是new,不信可以看一下這個useful.__name__,已經變成new了。到了這裡就沒有addspam什麼事情了。

6樓:

你沒理解修飾器。

用addspam修飾了useful後,你應該理解為這個函式變成了new。

當呼叫useful函式的時候,其實是呼叫了new。

7樓:

沒有複製,函式也是個物件,基本就和你 return 乙個 list 乙個 dict 沒什麼兩樣。

試試看在 Python REPL 中建立乙個 function:

>>> def foobar(): print("你好")

>>> foobar

>>> func_list = [foobar, foobar, foobar]

>>> func_list[0]()

後者是乙個閉包 ( closure ),簡單來說就是函式物件中包裝了函式中引用的外部變數,可以想象成這個函式被動態建立的時候,引用的外部變數凍結在函式裡面了。

你新補充的我沒怎麼看懂,*args 的作用嗎?*args 在形參上的作用類似捕獲給函式的實參放在乙個 args 的表中作為形參,如果作為實參傳入的話,就是將 args 這個表解開作為分別的形參輸入。

什麼是工廠函式?Python 中工廠函式怎麼理解?

lalaland python class mq object def init self,string c self.config str string cdef print str self print self.config str def crete factory method confi...

python中為什麼定義函式裡面設定的變數不可用?

半個馮博士 上面的朋友已經把根本的問題說清楚了,就是作用域的問題。其實也有別的解決方案 deftest 1 a globalbb a 1 print b def test 2 c c b 2print c test 1 1 2test 2 2 4deffun 1 a b a 1print b b d...

為什麼 Python 不支援函式過載?而其他語言大都支援?

jijidawang 舉個例子,C 中的函式過載 void input inta void input chara void input doublea Python 呢 definput a a input C void helloworld inta 233 void helloworld in...