国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2019-11-25 15:55:21
字體:
來源:轉載
供稿:網友

前言

本文主要給大家介紹的是關于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')

結果也是一樣的。

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江油市| 南溪县| 常熟市| 纳雍县| 四会市| 乌兰浩特市| 基隆市| 兴化市| 垦利县| 金坛市| 辉南县| 汪清县| 泸西县| 桐梓县| 大英县| 光泽县| 文安县| 涪陵区| 徐州市| 息烽县| 家居| 黎城县| 东兰县| 锦屏县| 工布江达县| 丰镇市| 睢宁县| 凤城市| 陈巴尔虎旗| 桐梓县| 盱眙县| 同江市| 元氏县| 水富县| 濮阳县| 搜索| 靖边县| 丹凤县| 阳山县| 丹凤县| 上林县|