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

首頁 > 編程 > Python > 正文

詳解 Python中LEGB和閉包及裝飾器

2020-02-16 02:00:10
字體:
來源:轉載
供稿:網友

詳解 Python中LEGB和閉包及裝飾器

LEGB L>E>G?B

L:local函數內部作用域 E:enclosing函數內部與內嵌函數之間 G:global全局作用域 B:build-in內置作用域

python 閉包

1.Closure:內部函數中對enclosing作用域變量的引用

2.函數實質與屬性

函數是一個對象 函數執行完成后內部變量回收 函數屬性 函數返回值
passline = 60def func(val):  if val >= passline:    print ('pass')  else:    print ('failed')  def in_func():    print (val)  in_func()  return in_funcf = func(89)f()print (f.__closure__)

一般情況

def f_100(val):  passline = 60  if val >= passline:    print ('pass')  else:    print ('failed')def f_150(val):  passline = 90  if val >= passline:    print ('pass')  else:    print ('failed')f_100(89)f_150(89)

閉包

def set_passline(passline):  def cmp(val):    if val >= passline:      print ('Pass')    else:      print ('failed')  return cmpf_100 = set_passline(60)f_150 = set_passline(90)f_100(89)f_150(89)

Closure:內部函數中對enclosing作用域變量的引用,它會將enclosing作用域變量傳遞到內部函數的closure中

閉包的作用:

封裝 代碼復用

python閉包二

求和

def my_sum(*arg):  if len(arg) == 0:    return 0  for val in arg:    if not isinstance(val,int): # 有一個非int則返回0      return 0  return sum(arg)def my_average(*arg):  if len(arg) == 0:    return 0  for val in arg:    if not isinstance(val,int): # 有一個非int則返回0      return 0  return sum(arg)/len(arg)print (my_sum(1,2,3,4,5))print (my_sum(1,2,3,4,5,'6'))print (my_aveage(1,2,3,4,5))print(my_average())

閉包的使用

def my_sum(*arg):  return sum(arg)def my_average(*arg):  return sum(arg)/len(arg)def dec(func):  def in_dec(*arg): # my_sum    print ('in dec arg= ',arg)    if len(arg) ==0:      return 0    for val in arg:      if not isinstance(val, int):        return 0    return func(*arg)  # 閉包,存在于in_dec函數中的__closure__中,所以可以調用  return in_decmy_sum = dec(my_sum)  # 傳參print(my_sum (1,2,3,4,5))print(my_sum (1,2,3,4,5,'6'))# my_sum就是in_dec函數,會先執行參數類型判斷,然后執行__closure__中的函數my_sum

python 裝飾器

    裝飾器用來裝飾函數 返回一個函數對象 被裝飾函數標識符指向返回的函數對象 語法糖 @deco

使用裝飾器的方式

def dec(func):  def in_dec(*arg): # my_sum    print ('in dec arg= ',arg)    if len(arg) ==0:      return 0    for val in arg:      if not isinstance(val, int):        return 0    return func(*arg)  # 閉包,存在于in_dec函數中的__closure__中,所以可以調用  return in_dec  # 如果沒有返回值,則my_sum調用裝飾器后為None# my_sum = dec(my_sum)  # 不手動傳參@dec     # 裝飾器將my_sum作為參數傳入dec,并返回一個新的函數賦值給my_sumdef my_sum(*arg):  return sum(arg)def my_average(*arg):  return sum(arg)/len(arg)print(my_sum (1,2,3,4,5))print(my_sum (1,2,3,4,5,'6'))            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南宫市| 淳安县| 宣恩县| 新化县| 南召县| 金坛市| 大连市| 鱼台县| 博客| 广东省| 务川| 太原市| 靖安县| 通化市| 辉南县| 晴隆县| 公安县| 西和县| 文成县| 四会市| 怀柔区| 塔河县| 日照市| 中江县| 普洱| 盐亭县| 湘阴县| 垣曲县| 巴里| 遵义市| 调兵山市| 宣化县| 来安县| 获嘉县| 巴彦县| 山阴县| 安化县| 镇雄县| 滨海县| 宣恩县| 滁州市|