python中將函數賦值給變量時須要注意的一些問題

python中將函數賦值給變量時須要注意的一些問題html

變量賦值是咱們在平常開發中常常會遇到的一個問題,本文主要給你們介紹的是關於python將函數賦值給變量時須要注意的一些問題,分享出來供你們參考學習,下面話很少說了,來一塊兒看看詳細的介紹:python

見過兩種函數賦值給變量的形式,一種是app

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語句執行了。

下面的習題中,一個變形是要求在函數調用的先後打印出'begin call'和'end call',下面一位網友的程序是這麼寫的:    
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')
結果也是同樣的。
總結
以上就是這篇文章的所有內容了,但願本文的內容對你們的學習或者工做能帶來必定的幫助函數

相關文章
相關標籤/搜索