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

首頁 > 編程 > Python > 正文

詳解Python函數(shù)作用域的LEGB順序

2019-11-25 16:47:44
字體:
供稿:網(wǎng)友

本文為大家介紹了Python函數(shù)作用域的查找順序,供大家參考,具體內(nèi)容如下

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

2.LEGB是作什么用的?
為什么非要介紹這個(gè)呢?或者說它們的作用是什么?
原因是因?yàn)槲覀兊脑趯W(xué)習(xí)Python函數(shù)的時(shí)候,經(jīng)常會(huì)遇到很多定義域的問題,全部變量,內(nèi)部變量,內(nèi)部嵌入的函數(shù),等等,Python是如何查找的呢?以及Python又是按照什么順序來查找的呢?這里做一個(gè)順序的說明

3.順序是什么
跟名字一樣,Python在函數(shù)里面的查找分為4種,稱之為L(zhǎng)EGB,也正是按照這種順序來查找的。

首先,是local,先查找函數(shù)內(nèi)部
然后,是enclosing,再查找函數(shù)內(nèi)部與嵌入函數(shù)之間(是指在函數(shù)內(nèi)部再次定義一個(gè)函數(shù))
其次,是global,查找全局
最后,是build-in,內(nèi)置作用域

4.舉例說明
ex1

passline = 60def func(val):  if val >= passline:    print('pass')  else:    print('failed')func(89)  '''''''''''' pass[Finished in 0.2s] ''''''''''''

Python函數(shù)首先查找local,在局部變量作用域里并沒有passline的定義,然后發(fā)現(xiàn)函數(shù)內(nèi)部并沒有內(nèi)嵌函數(shù),這時(shí)Python開始查找global,在全局里查找到passline的定義,被調(diào)用。

ex2

def Max(val1, val2):  return max(val1, val2)print(Max(90, 100))'''''''''100[Finished in 0.1s]'''''''''

Max函數(shù)里面直接調(diào)用另外一個(gè)函數(shù),調(diào)用的max()(注意兩個(gè)函數(shù)的大小寫不一樣),該函數(shù)并沒有被定義,但是卻屬于我們上述的第四種,屬于build-in函數(shù),既是在python標(biāo)準(zhǔn)庫里的函數(shù),內(nèi)置的,可以直接調(diào)用的。最后一步才會(huì)查找到這里

關(guān)于第二種,屬于內(nèi)嵌函數(shù),即使在函數(shù)里面再次定義一個(gè)函數(shù),這時(shí)會(huì)首先查找local函數(shù)里面是否有定義,然后才會(huì)查找函數(shù)里面內(nèi)嵌函數(shù)里面有沒有定義,這一種有專門的名詞,叫做閉包,閉包在之前一些文章中都有介紹,希望大家閱讀。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 揭东县| 通山县| 吉安县| 新余市| 古田县| 浪卡子县| 江北区| 镇江市| 临澧县| 浦北县| 鄂托克前旗| 玉龙| 新巴尔虎左旗| 玉林市| 抚松县| 兰州市| 筠连县| 玉山县| 肥乡县| 扶绥县| 天水市| 泉州市| 镇巴县| 手游| 大连市| 祁门县| 颍上县| 廊坊市| 仁布县| 平凉市| 达尔| 营山县| 开封市| 安化县| 阿拉善右旗| 新竹县| 合水县| 稷山县| 泸西县| 策勒县| 辽阳县|