最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年08月03日 10:16:52   投稿:lqh  
這篇文章主要介紹了詳解 Python中LEGB和閉包及裝飾器的相關(guān)資料,主要介紹了函數(shù)作用域和閉包的理解和使用方法及Python中的裝飾器,需要的朋友可以參考下

詳解 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ù)中對(duì)enclosing作用域變量的引用

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

  • 函數(shù)是一個(gè)對(duì)象
  • 函數(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ù)中對(duì)enclosing作用域變量的引用,它會(huì)將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): # 有一個(gè)非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): # 有一個(gè)非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ù),會(huì)先執(zhí)行參數(shù)類型判斷,然后執(zhí)行__closure__中的函數(shù)my_sum

python 裝飾器

  1. 裝飾器用來(lái)裝飾函數(shù)
  2. 返回一個(gè)函數(shù)對(duì)象
  3. 被裝飾函數(shù)標(biāo)識(shí)符指向返回的函數(shù)對(duì)象
  4. 語(yǔ)法糖 @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  # 如果沒(méi)有返回值,則my_sum調(diào)用裝飾器后為None

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

另一個(gè)例子

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和閉包及裝飾器的介紹,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,本站關(guān)于Python 的文章還有很多,還希望大家搜索查閱,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Python urllib3軟件包的使用說(shuō)明

    Python urllib3軟件包的使用說(shuō)明

    這篇文章主要介紹了Python urllib3軟件包的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Python 面向?qū)ο笾庋b、繼承、多態(tài)操作實(shí)例分析

    Python 面向?qū)ο笾庋b、繼承、多態(tài)操作實(shí)例分析

    這篇文章主要介紹了Python 面向?qū)ο笾庋b、繼承、多態(tài)操作,結(jié)合實(shí)例形式分析了Python面相對(duì)象程序設(shè)計(jì)中封裝、繼承、多態(tài)相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • Python 類的私有屬性和私有方法實(shí)例分析

    Python 類的私有屬性和私有方法實(shí)例分析

    這篇文章主要介紹了Python 類的私有屬性和私有方法,結(jié)合實(shí)例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類的私有屬性與私有方法簡(jiǎn)單操作技巧,需要的朋友可以參考下
    2019-09-09
  • 利用Python實(shí)現(xiàn)K-Means聚類的方法實(shí)例(案例:用戶分類)

    利用Python實(shí)現(xiàn)K-Means聚類的方法實(shí)例(案例:用戶分類)

    k-means是發(fā)現(xiàn)給定數(shù)據(jù)集的k個(gè)簇的算法,也就是將數(shù)據(jù)集聚合為k類的算法,下面這篇文章主要給大家介紹了關(guān)于利用Python實(shí)現(xiàn)K-Means聚類的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • python如何通過(guò)跳板機(jī)連接MySQL

    python如何通過(guò)跳板機(jī)連接MySQL

    這篇文章主要介紹了python如何通過(guò)跳板機(jī)連接MySQL問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python多進(jìn)程并行代碼實(shí)例

    python多進(jìn)程并行代碼實(shí)例

    這篇文章主要介紹了python多進(jìn)程并行代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python中queue.Queue之task_done的用法

    python中queue.Queue之task_done的用法

    這篇文章主要介紹了python中queue.Queue之task_done的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python 解決函數(shù)返回return的問(wèn)題

    python 解決函數(shù)返回return的問(wèn)題

    這篇文章主要介紹了python 解決函數(shù)返回return的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 如何用Python實(shí)現(xiàn)RSA加密算法

    如何用Python實(shí)現(xiàn)RSA加密算法

    RSA加密算法是一種非對(duì)稱加密算法,即使用不同的密鑰進(jìn)行加密和解密,下面這篇文章主要給大家介紹了關(guān)于如何用Python實(shí)現(xiàn)RSA加密算法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Python正則表達(dá)式匹配HTML頁(yè)面編碼

    Python正則表達(dá)式匹配HTML頁(yè)面編碼

    這篇文章主要介紹了Python正則表達(dá)式匹配HTML頁(yè)面編碼,本文直接給出代碼和匹配實(shí)例,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

开阳县| 静海县| 望谟县| 南宫市| 鸡东县| 海淀区| 福建省| 寻乌县| 曲周县| 松江区| 威宁| 香河县| 三原县| 谢通门县| 呼图壁县| 寿光市| 香港| 尼木县| 稻城县| 锡林浩特市| 白水县| 建阳市| 平泉县| 博白县| 潍坊市| 桓仁| 广宗县| 登封市| 临沭县| 左贡县| 鄂伦春自治旗| 苍南县| 邓州市| 清苑县| 睢宁县| 莱州市| 册亨县| 千阳县| 武清区| 五大连池市| 新丰县|