E>G?BL:local函數(shù)內(nèi)部作用域E:enclosing函數(shù)內(nèi)部與內(nèi)嵌函數(shù)之間G:global全局作用域B:build-in內(nèi)置作用域python閉包1.Closure:內(nèi)部函數(shù)中對enclosing作用域變量的引用2.函數(shù)實質(zhì)與屬性函數(shù)是一個對象函數(shù)執(zhí)行完成后內(nèi)部變量回收函數(shù)屬性函數(shù)返回值passline=60deffunc(val):ifval>=passline:print('pass')els" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統(tǒng) 1718 0

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

LEGB L>E>G?B

  • L:local函數(shù)內(nèi)部作用域
  • E:enclosing函數(shù)內(nèi)部與內(nèi)嵌函數(shù)之間
  • G:global全局作用域
  • B:build-in內(nèi)置作用域

python 閉包

1.Closure:內(nèi)部函數(shù)中對enclosing作用域變量的引用

2.函數(shù)實質(zhì)與屬性

  • 函數(shù)是一個對象
  • 函數(shù)執(zhí)行完成后內(nèi)部變量回收
  • 函數(shù)屬性
  • 函數(shù)返回值
            
passline = 60
def func(val):
  if val >= passline:
    print ('pass')
  else:
    print ('failed')
  def in_func():
    print (val)
  in_func()
  return in_func

f = 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 cmp

f_100 = set_passline(60)
f_150 = set_passline(90)
f_100(89)
f_150(89)


          

Closure:內(nèi)部函數(shù)中對enclosing作用域變量的引用,它會將enclosing作用域變量傳遞到內(nèi)部函數(shù)的closure中

閉包的作用:

  • 封裝
  • 代碼復(fù)用

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函數(shù)中的__closure__中,所以可以調(diào)用
  return in_dec

my_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函數(shù),會先執(zhí)行參數(shù)類型判斷,然后執(zhí)行__closure__中的函數(shù)my_sum


          

python 裝飾器

  1. 裝飾器用來裝飾函數(shù)
  2. 返回一個函數(shù)對象
  3. 被裝飾函數(shù)標(biāo)識符指向返回的函數(shù)對象
  4. 語法糖 @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函數(shù)中的__closure__中,所以可以調(diào)用
  return in_dec  # 如果沒有返回值,則my_sum調(diào)用裝飾器后為None

# my_sum = dec(my_sum)  # 不手動傳參
@dec     # 裝飾器將my_sum作為參數(shù)傳入dec,并返回一個新的函數(shù)賦值給my_sum
def 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'))


          

另一個例子

            
def deco(func):
  def in_deco(x,y):
    print ('in deco')
    func(x,y)
  print ('call deco')
  return in_deco

@deco
def bar(x, y):
  print ('in bar',x+y)

bar(1,2)


          

以上就是Python中LEGB和閉包及裝飾器的介紹,如有疑問請留言或者到本站社區(qū)交流討論,本站關(guān)于Python 的文章還有很多,還希望大家搜索查閱,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日日日操操操 | 国产精品国偷自产在线 | 精品国产日韩亚洲一区91 | 最新精品亚洲成a人在线观看 | 思思久热re6这里有精品 | 福利视频91 | 婷婷在线成人免费观看搜索 | 亚洲精品视频在线观看免费 | 亚洲国产精品久久久久婷婷老年 | 国产一区二区三区四区在线 | 天天操天天舔天天干 | 日本亚洲视频 | 日本阿v精品视频在线观看 日本爱爱免费视频 | 午夜影院免费在线观看 | 裸身裸乳免费视频网站 | 久久久99精品 | 一级特黄国产高清毛片97看片 | 四虎免费视频 | 五月天亚洲婷婷 | 一级免费毛片 | 四虎国产精品免费久久影院 | 99九九99九九九视频精品 | 亚洲一区二区视频在线观看 | 亚洲精品中文字幕乱码一区二区 | 91香蕉福利一区二区三区 | 成年人免费在线视频 | 国语精品视频在线观看不卡 | 波多野结衣视频一区 | 亚洲激情在线观看 | 国产精品偷伦视频免费观看的 | 亚洲欧美日韩伦中文 | 免费深夜福利 | 国产精品欧美日韩视频一区 | 久久不射网 | 亚洲精品一区二区三区 | 国产福利视频一区二区三区 | 欧美伦理一区 | 成人欧美在线视频 | 99视频免费播放 | 日韩一区精品视频在线看 | 成人在线观看国产 |