国产探花免费观看_亚洲丰满少妇自慰呻吟_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'))            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太仆寺旗| 修文县| 普定县| 五寨县| 达州市| 伊金霍洛旗| 龙游县| 饶平县| 沁源县| 中江县| 邢台县| 广汉市| 普定县| 崇州市| 墨竹工卡县| 龙州县| 南昌市| 信阳市| 汶上县| 广丰县| 合肥市| 石屏县| 西城区| 紫金县| 成都市| 洱源县| 宽甸| 天镇县| 新密市| 定陶县| 湖南省| 精河县| 琼结县| 墨脱县| 郯城县| 辉南县| 威海市| 齐河县| 哈尔滨市| 蓬莱市| 神农架林区|