變數賦值是我們在日常開發中經常會遇到的一個問題,本文主要給大家介紹的是關于python將函式賦值給變數時需要注意的一些問題,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:
見過兩種函式賦值給變數的形式,一種是
a=f
另一種是
a=f()
這兩種形式是有區別的,分別總結一下,
1.a=f型屬于將變數指向函式,
用代碼驗證一下:
>>> f = abs
>>> f(-10)
10
說明變數f現在已經指向了abs函式本身,直接呼叫abs()函式和呼叫變數f()完全相同,現在呼叫f()和呼叫abs()是一樣的了,
再舉一個工廠函式的例子:
# Python學習交流群:778463939
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陳述句中也會如此,
# Python學習交流群:778463939
>>>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')
剛開始我以為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')
結果也是一樣的,
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者作業能帶來一定的幫助
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/200491.html
標籤:Python
上一篇:從底層剖析Python深淺拷貝
下一篇:socket 套接字通信
