<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Python是靜態作用域語言,但是它自身是一個動態語言。在Python中變數的作用域是由變數在程式碼中的位置決定的,與C語言有些相似,但不是完全一樣。
在Python 2.0及之前的版本中,Python只支援3種作用域,即區域性作用域,全域性作用域,內建作用域;在Python
2.2中,Python正式引入了一種新的作用域 — 巢狀作用域;巢狀作用域的引入,本質上為Python實現了對閉包的支援。
def test(): A = 3 B = 4 def stu(): C = 3 return A+B+C return stu stu = test() stu
在上述此程式碼中stu方法定義在test的內部,內部函數stu即可以使用外部函數test的變數,我們稱這種行為叫做閉包。
Python中不是任何程式碼塊都可以引入新的作用域這與C有很大的不同:
在C中:
#include<stdio.h> int main() { if(2 > 0) { int i = 0; } printf("i = %d", i); return 0; }
在上述程式碼中,if子句引入了一個區域性作用域,變數i就存在於這個區域性作用域中,但對外不可見,因此,接下來在printf函數中對變數i的參照會引發編譯錯誤。
但是,在Python中卻並非如此:
if True: i = 0 print i
在上述程式碼中,if子句並沒有引入一個區域性作用域,變數i仍然處在全域性作用域中,因此,變數i對於接下來的print語句是可見的。
實際上,在Python中,只有模組,類以及函數才會引入新的作用域,其它的程式碼塊是不會引入新的作用域的。
在Python中,使用一個變數之前不必預先宣告它,但是在真正使用它之前,它必須已經繫結到某個物件;而名字繫結將在當前作用域中引入新的變數,同時遮蔽外層作用域中的同名變數,不論這個名字繫結發生在當前作用域中的哪個位置。
>>> f() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in f NameError: name 'i' is not defined >>>
執行結果報錯:
NameError: name ‘i’ is not defined
程式執行時,Python首先在函數f的本地作用域中查詢變數i,查詢失敗,接著在全域性作用域和內建作用域中查詢變數i,仍然失敗,最終丟擲NameError異常。
>>> def f(): ... i = 8 ... print(i) ... >>> f() 8 >>> print(i) 0 >>>
執行結果顯示:
8和0
i = 8是一個名字繫結操作,它在函數f的區域性作用域中引入了新的變數i,遮蔽了全域性變數i,因此f內部的print語句看到的是區域性變數i,f外部的print語句看到的是全域性變數i。
>>> i = 0 >>> def f(): ... print(i) ... i = 0 ... >>> f() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in f UnboundLocalError: local variable 'i' referenced before assignment >>>
執行結果報錯:
UnboundLocalError: local variable ‘i’ referenced before assignment
在上述中,函數f中的變數i是區域性變數,但是在print語句使用它的時候,它還未被繫結到任何物件之上,所以丟擲異常。
名字繫結發生在以下幾種情況之下:
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45