python 將函式賦值給變數時需要注意的一些問題
阿新 • • 發佈:2021-01-21
https://www.cnblogs.com/seirios1993/p/6582936.html
見過兩種函式賦值給變數的形式,一種是
a=f
另一種是
a=f()
這兩種形式是有區別的,分別總結一下。
1.a=f型屬於將變數指向函式。
用程式碼驗證一下:
>>> f = abs
>>> f(-10)
10
說明變數f
現在已經指向了abs
函式本身。直接呼叫abs()
函式和呼叫變數f()
完全相同。這是廖雪峰老師python教程上的例子,現在呼叫f()和呼叫abs()是一樣的了。
再舉一個工廠函式的例子:
def maker(N):
def action(X):
return X**N
return action
這個巢狀函式的外層返回值為內層函式的函式名,注意沒有括號,這裡有無括號是有很大區別的。此時呼叫外部函式:
f=maker(2)
那麼如上所述,f便指向了action函式,且限制條件為N=2,可以理解為f為N等於2時的action函式。我們來呼叫它:
>>> f(3)
9
證明f和action函式是一樣的。
2.a=f()型屬於將f()的返回值賦值給a的過程
這裡的a僅僅接收f()的返回值,如果f()沒有返回值,那麼a即被賦值為None。這裡值得注意的一點是,在a=f()的執行過程中,f()會執行一次,這也是我剛剛搞明白的,如:
>>> def add(x,y):
z=x+y
print(z)
>>>a=add(3,4)
7