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

來源:互聯網
上載者:User

python中將函數賦值給變數時需要注意的一些問題,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語句執行了。

下面的習題中,一個變形是要求在函數調用的前後列印出'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')

結果也是一樣的。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的協助,如果有疑問大家可以留言交流,謝謝大家對幫客之家的支援。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.