python中將函數(shù)賦值給變量時(shí)需要注意的一些問題
前言
本文主要給大家介紹的是關(guān)于python將函數(shù)賦值給變量時(shí)需要注意的一些問題,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹:
見過兩種函數(shù)賦值給變量的形式,一種是
a=f
另一種是
a=f()
這兩種形式是有區(qū)別的,分別總結(jié)一下。
1.a=f型屬于將變量指向函數(shù)。
用代碼驗(yàn)證一下:
>>> f = abs >>> f(-10) 10
說明變量f現(xiàn)在已經(jīng)指向了abs函數(shù)本身。直接調(diào)用abs()
函數(shù)和調(diào)用變量f()
完全相同。這是廖雪峰老師python教程上的例子,現(xiàn)在調(diào)用f()
和調(diào)用abs()
是一樣的了。
再舉一個(gè)工廠函數(shù)的例子:
def maker(N): def action(X): return X**N return action
這個(gè)嵌套函數(shù)的外層返回值為內(nèi)層函數(shù)的函數(shù)名,注意沒有括號(hào),這里有無括號(hào)是有很大區(qū)別的。此時(shí)調(diào)用外部函數(shù):
f=maker(2)
那么如上所述,f便指向了action函數(shù),且限制條件為N=2,可以理解為f為N等于2時(shí)的action函數(shù)。我們來調(diào)用它:
>>> f(3) 9
證明f和action函數(shù)是一樣的。
2.a=f()型屬于將f()的返回值賦值給a的過程
這里的a僅僅接收f()
的返回值,如果f()
沒有返回值,那么a即被賦值為None。這里值得注意的一點(diǎn)是,在a=f()
的執(zhí)行過程中,f()
會(huì)運(yùn)行一次,這也是我剛剛搞明白的,如:
>>> def add(x,y): z=x+y print(z) >>>a=add(3,4) 7
這里雖然只有一個(gè)賦值語句執(zhí)行了,但是卻輸出了結(jié)果7,說明賦值過程函數(shù)add執(zhí)行了,然而a的值為None,且只能通過print語句才可以顯示。不只是賦值過程函數(shù)會(huì)執(zhí)行,寫在return語句中也會(huì)如此。
>>>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教程裝飾器一節(jié)的例程,剛開始我以為return func(*args,**kw)
這個(gè)語句是返回了now()
函數(shù)(即func函數(shù))的返回值,后來發(fā)現(xiàn)now函數(shù)沒有返回值,即為None,所以其實(shí)是這個(gè)語句在賦值過程,
func(*args,**kw)
執(zhí)行了,即函數(shù)now的print語句執(zhí)行了。
下面的習(xí)題中,一個(gè)變形是要求在函數(shù)調(diào)用的前后打印出'begin call'和'end call',下面一位網(wǎng)友的程序是這么寫的:
def wrapper(*args,**kw): print(t+'begin call') result=func(*args,**kw) print(t+'end call') return result
開始不太理解為什么使用result=func(*args,**kw)
這句,后來理解后才明白其實(shí)賦值本身并沒有意義,只是這句話同時(shí)使得func函數(shù)運(yùn)行了,所以寫成
def wrapper(*args,**kw): print(t+'begin call') func(*args,**kw) print(t+'end call')
結(jié)果也是一樣的。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
python基于paramiko庫遠(yuǎn)程執(zhí)行 SSH 命令,實(shí)現(xiàn) sftp 下載文件
這篇文章主要介紹了python基于paramiko庫遠(yuǎn)程執(zhí)行 SSH 命令,實(shí)現(xiàn) sftp 下載文件的方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03淺談Python數(shù)據(jù)類型之間的轉(zhuǎn)換
下面小編就為大家?guī)硪黄獪\談Python數(shù)據(jù)類型之間的轉(zhuǎn)換。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06Python實(shí)現(xiàn)從多表格中隨機(jī)抽取數(shù)據(jù)
這篇文章主要介紹了如何基于Python語言實(shí)現(xiàn)隨機(jī)從大量的Excel表格文件中選取一部分?jǐn)?shù)據(jù),并將全部文件中隨機(jī)獲取的數(shù)據(jù)合并為一個(gè)新的Excel表格文件的方法,希望對(duì)大家有所幫助2023-05-05Python標(biāo)準(zhǔn)庫shutil用法實(shí)例詳解
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫shutil用法,結(jié)合實(shí)例形式分析了shutil庫針對(duì)文件與文件夾各種常見操作技巧與相關(guān)使用注意事項(xiàng),需要的朋友可以參考下2018-08-08使用python如何將數(shù)據(jù)集劃分為訓(xùn)練集、驗(yàn)證集和測(cè)試集
這篇文章主要介紹了使用python如何將數(shù)據(jù)集劃分為訓(xùn)練集、驗(yàn)證集和測(cè)試集問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Python Django 頁面上展示固定的頁碼數(shù)實(shí)現(xiàn)代碼
這篇文章主要介紹了Python Django 頁面上展示固定的頁碼數(shù)實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08