變數賦值是我們在日常開發中經常會遇到的一個問題,以下這篇文章主要給大家介紹了關於python中將函數賦值給變數時需要注意的一些問題,文中透過範例程式碼介紹的非常詳細,對大家有一定的參考學習價值,需要的朋友們下面來一起看看吧。
前言
本文主要給大家介紹的是python將函數賦值給變數時需要注意的一些問題,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:
看過兩種函數賦值給變數的形式,一種是
##
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這裡雖然只有一個賦值語句執行了,但是卻輸出了結果7,說明賦值過程函數add執行了,然而a的值為None,且只能透過print語句才可以顯示。不只是賦值過程函數會執行,寫在return語句中也會如此。
>>>def log(func): def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper >>>@log >>>def now(): print('2015-3-25')這是廖雪峰老師python教程裝飾器一節的例程,剛開始我以為
return func(*args,**kw)這個語句是傳回了
now()函數(即func函數)的回傳值,後來發現now函數沒有回傳值,也就是為None,所以其實是這個語句在賦值過程,
func(*args,**kw)執行了,也就是函數now的print語句執行了。
def wrapper(*args,**kw): print(t+'begin call') result=func(*args,**kw) print(t+'end call') return result開始不太理解為什麼使用
result=func(*args,**kw)這句,後來理解後才明白其實賦值本身並沒有意義,只是這句話同時使得func函數運行了,所以寫成
def wrapper(*args,**kw): print(t+'begin call') func(*args,**kw) print(t+'end call')結果也是一樣的。
總結#
以上是python中函數賦值給變數時的問題注意詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!