国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

Python有關(guān)名字綁定的相關(guān)介紹

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:22:57
文檔

Python有關(guān)名字綁定的相關(guān)介紹

Python有關(guān)名字綁定的相關(guān)介紹:Python的名字綁定在Python中,對(duì)象是通過(guò)名字進(jìn)行關(guān)聯(lián)和引用的。Python通過(guò)名字綁定操作來(lái)引入名字。Python中的所謂的代碼塊就是一段作為執(zhí)行單元的程序。比如:模塊、函數(shù)、類(lèi)定義。在交互式環(huán)境中輸入的命令也是代碼塊的一種。一個(gè)Python腳本文件也是
推薦度:
導(dǎo)讀Python有關(guān)名字綁定的相關(guān)介紹:Python的名字綁定在Python中,對(duì)象是通過(guò)名字進(jìn)行關(guān)聯(lián)和引用的。Python通過(guò)名字綁定操作來(lái)引入名字。Python中的所謂的代碼塊就是一段作為執(zhí)行單元的程序。比如:模塊、函數(shù)、類(lèi)定義。在交互式環(huán)境中輸入的命令也是代碼塊的一種。一個(gè)Python腳本文件也是

Python的名字綁定

在Python中,對(duì)象是通過(guò)名字進(jìn)行關(guān)聯(lián)和引用的。Python通過(guò)名字綁定操作來(lái)引入名字。

Python中的所謂的代碼塊就是一段作為執(zhí)行單元的程序。比如:模塊、函數(shù)、類(lèi)定義。在交互式環(huán)境中輸入的命令也是代碼塊的一種。一個(gè)Python腳本文件也是一個(gè)代碼塊。還有就是,當(dāng)我們?cè)诿钚猩鲜褂?c選項(xiàng)指定的命令也是一個(gè)代碼塊。傳遞給內(nèi)建函數(shù)eval()和exec()的字符串參數(shù)也是代碼塊的一種。

代碼塊是以執(zhí)行幀的方式被執(zhí)行的,一個(gè)執(zhí)行幀包含了一些管理信息,可以用于調(diào)試。執(zhí)行幀還會(huì)在執(zhí)行完當(dāng)前的代碼塊以后指定在何處,以怎樣的方式執(zhí)行接下來(lái)的代碼。

Python中的作用域定義了名字在代碼塊中的可見(jiàn)性。如果在代碼塊中定義了一個(gè)局部變量,那么這個(gè)局部變量的作用域就是所在的這個(gè)代碼塊。如果這個(gè)定義發(fā)生在函數(shù)體內(nèi),則這個(gè)變量的作用域就擴(kuò)展到包含在這個(gè)函數(shù)中的任何代碼塊中,但是,如果包含在這個(gè)函數(shù)中的一個(gè)代碼塊中,同樣的名字被綁定到了不同的對(duì)象上,那么外面的名字將不能被擴(kuò)展到這個(gè)代碼塊中。

def out_func():
 #a的作用域在out_func這個(gè)函數(shù)中
 a = 0
 b = 0
 def in_func():
 #a的作用域從out_func擴(kuò)展到了in_func中,因?yàn)閕n_func這個(gè)代碼塊包含在out_func中
 print(a)
 #out_func函數(shù)中的b不能擴(kuò)展到in_func中,因?yàn)樵趇n_func中,b重新綁定到了不同的對(duì)象上,所以在out_func中的b的作用域不能擴(kuò)展到in_func中。
 b = 1

在Python中,定義在類(lèi)代碼塊中名字只能在類(lèi)中可見(jiàn),并且類(lèi)中的名字的作用域不能擴(kuò)展到類(lèi)中的方法中。如果在類(lèi)定義中出現(xiàn)了生成器表達(dá)式和列表展開(kāi),那么類(lèi)中的名字也不能擴(kuò)展到這些表達(dá)式中,因?yàn)榱斜碚归_(kāi)和生成器表達(dá)式的實(shí)現(xiàn)都是使用函數(shù)作用域的。

class C:
 a = 0
 # 在列表表達(dá)式中,a會(huì)因?yàn)槲炊x而拋出NameError異常
 b = list(a + i for i in range(10))
 def method(self):
 #由于定義在類(lèi)中的名字不能擴(kuò)展到方法中,所以下面的語(yǔ)句是錯(cuò)誤的,會(huì)拋出a未定義的NameError異常
 print(a)

當(dāng)在一個(gè)代碼塊中使用一個(gè)名字的時(shí)候,會(huì)對(duì)最近的外圍作用域進(jìn)行解析,以查找這個(gè)名字。所有的這些在當(dāng)前代碼塊中可見(jiàn)的作用域的集合,稱為

當(dāng)前的代碼塊的環(huán)境。

名字綁定和作用域的關(guān)系

如果一個(gè)名字綁定到一個(gè)代碼塊中,除非這個(gè)名字聲明為nonlocal(nonlocal聲明的作用是:使得變量在外圍作用域中,在全局作用域之前被解析),否則這個(gè)名字就是這個(gè)代碼塊的局部變量。如果一個(gè)名字被綁定到模塊級(jí)別,則這個(gè)名字的作用域是全局的,這個(gè)變量是全局變量(模塊中的變量,對(duì)于模塊而言是局部變量,而對(duì)于模塊中的代碼塊而言,則是全局變量)。如果一個(gè)名字在一個(gè)代碼塊中使用,但是不是在這個(gè)代碼塊中被定義的,則這個(gè)變量就是一個(gè)自由變量。

名字綁定相關(guān)的異常

如果在進(jìn)行名字查找的時(shí)候,名字沒(méi)有被找到,則會(huì)拋出一個(gè) NameError 異常,如果名字引用的是一個(gè)局部變量,但是這個(gè)名字還沒(méi)有被綁定到這個(gè)局部變量,則會(huì)拋出一個(gè) UnboundLocalError 異常(UnboundLocalError 是 NameError的子類(lèi))。

發(fā)生名字綁定行為的情況

發(fā)生名字綁定的行為主要有:

通常的給函數(shù)傳遞參數(shù)的時(shí)候,參數(shù)名會(huì)和傳遞過(guò)來(lái)的對(duì)象進(jìn)行綁定

使用import語(yǔ)句進(jìn)行導(dǎo)入的時(shí)候,其中 from ... import * 語(yǔ)句會(huì)將被導(dǎo)入的模塊中的所有可以被導(dǎo)入的名字進(jìn)行綁定操作

類(lèi)定義的時(shí)候

函數(shù)定義的時(shí)候

進(jìn)行賦值操作的時(shí)候

在for循環(huán)的for語(yǔ)句中

在with語(yǔ)句中的as后面

在expect語(yǔ)句中的as后面

Python中的名字綁定的Pitfall

在Python中,名字綁定的一些規(guī)則,會(huì)導(dǎo)致在使用名字的時(shí)候,出現(xiàn)不能理解的錯(cuò)誤,特別是對(duì)于有C、C++ 和 Java經(jīng)驗(yàn)的用戶。

在Python中,名字綁定操作無(wú)論發(fā)生在當(dāng)前塊的 任何 位置,在這個(gè)代碼塊中對(duì)這個(gè)名字的引用都會(huì)使用在當(dāng)前塊中綁定的對(duì)象。那么,問(wèn)題就來(lái)了,如果我們?cè)诿纸壎ú僮靼l(fā)生之前對(duì)這個(gè)名字進(jìn)行了引用,那么就會(huì)出現(xiàn)錯(cuò)誤,拋出 UnboundLocalError 異常。

>>> a = 10
>>> def function():
print(a)
a = 20# a的綁定操作發(fā)生在print之前
>>> function()
Traceback (most recent call last):
 File "<pyshell#5>", line 1, in <module>
 function()
 File "<pyshell#4>", line 2, in function
 print(a)
UnboundLocalError: local variable 'a' referenced before assignment

在Python中,代碼塊中的局部變量可以通過(guò)掃描整個(gè)代碼塊來(lái)獲得綁定的名字,所以在上面的代碼中,a這個(gè)名字在執(zhí)行print的時(shí)候通過(guò)對(duì)代碼塊的掃描已經(jīng)被找到,但是名字a的綁定操作卻還沒(méi)有發(fā)生,所以出現(xiàn)了錯(cuò)誤。

在上面的代碼中,如果我們需要外面定義的全局變量a,則可以使用global 語(yǔ)句進(jìn)行聲明。

>>> a = 10
>>> def function():
global a
print(a)
a = 20#這里并不引入新的名字,而是將全局變量a綁定到20上
>>> function()
10
>>> a
20

global 語(yǔ)句的作用是,使得后面對(duì)通過(guò)這條語(yǔ)句聲明的對(duì)象的引用,使用的是頂層名字空間中的名字。在頂層名字空間中,包含了全局名字空間和內(nèi)建名字空間,全局名字空間會(huì)首先被搜索,如果沒(méi)有找到,會(huì)對(duì)內(nèi)建名字空間進(jìn)行搜索。global 語(yǔ)句必須出現(xiàn)在名字使用之前。

如果在外圍作用域中的自由變量包含了一個(gè)global聲明,則這個(gè)自由變量被認(rèn)為是全局的。

內(nèi)建名字空間

在查找內(nèi)建名字空間的時(shí)候,會(huì)訪問(wèn)當(dāng)前代碼塊的全局名字空間中的 __builtins__名字,這個(gè)名字引用的是一個(gè)名字字典或者是一個(gè)模塊。在 __main__ 模塊中, __builtins__ 的引用是內(nèi)建模塊 builtins,然而,如果是在其他模塊中, __builtins__ 引用的是 builtins 模塊的名字字典。

注意:

CPython的實(shí)現(xiàn)中,不能手動(dòng)修改 __builtins__ 這個(gè)變量,如果需要覆蓋這個(gè)內(nèi)建名字空間中的名字,需要導(dǎo)入 builtins 模塊,然后修改這個(gè)模塊中相應(yīng)的屬性。

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Python有關(guān)名字綁定的相關(guān)介紹

Python有關(guān)名字綁定的相關(guān)介紹:Python的名字綁定在Python中,對(duì)象是通過(guò)名字進(jìn)行關(guān)聯(lián)和引用的。Python通過(guò)名字綁定操作來(lái)引入名字。Python中的所謂的代碼塊就是一段作為執(zhí)行單元的程序。比如:模塊、函數(shù)、類(lèi)定義。在交互式環(huán)境中輸入的命令也是代碼塊的一種。一個(gè)Python腳本文件也是
推薦度:
標(biāo)簽: 綁定 名字 定的
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top
主站蜘蛛池模板: 日韩欧美在线综合 | 日本一区二区三区在线观看 | 欧美xxxxxbbbbb| 婷婷综合久久中文字幕蜜桃三电影 | 日韩欧美在线综合网 | 久久99一区 | 日韩精品 电影一区 亚洲高清 | 国产欧美日韩一区二区三区在线 | 久久国产精品电影 | 欧美亚洲综合一区 | 亚洲一级毛片免观看 | 国产喷水在线观看 | 亚洲成色999久久网站 | 国产丝袜美女一区二区三区 | 在线永久免费观看的毛片 | 日本全黄视频 | 国产精品电影一区二区 | 日本a级精品一区二区三区 日本不卡视频一区二区三区 | 亚洲综合欧美在线 | 欧美精品一区二区三区久久 | 久久久久成人精品一区二区 | 夜夜操夜夜骑 | 91一区二区在线观看精品 | 欧美成人伊人久久综合网 | 亚洲一区二区欧美 | 欧美性一区二区三区五区 | 亚洲色图国产精品 | 国产精品区一区二区三 | 欧美日韩免费电影 | 97热久久免费频精品99国产成人 | 欧美日韩国产精品综合 | 国产有码视频 | 国产精彩视频在线观看 | 91久久国产综合精品女同我 | 日韩一区三区 | 青草视频在线观看免费 | 在线精品亚洲欧洲第一页 | 久久精品综合国产二区 | 国产精品视频区 | 99久久国产综合精品成人影院 | 热九九精品 |