當前位置:首頁 » 編程語言 » python中的nonlocal

python中的nonlocal

發布時間: 2022-04-03 13:42:42

A. python語言中命名空間的使用

如果一個命名聲明為全局的,那麼對它的所有引用和賦值會直接搜索包含這個模塊全局命名的作用域。如果要重新綁定最里層作用域之外的變數,可以使用 nonlocal 語句;如果不聲明為 nonlocal,這些變數將是只讀的(對這樣的變數賦值會在最裡面的作用域創建一個新的局部變數,外部具有相同命名的那個變數不會改變)。
通常,局部作用域引用當前函數的命名。在函數之外,局部作用域與全局使用域引用同一命名空間:模塊命名空間。類定義也是局部作用域中的另一個命名空間。
重要的是作用域決定於源程序的意義:一個定義於某模塊中的函數的全局作用域是該模塊的命名空間,而不是該函數的別名被定義或調用的位置,了解這一點非常重要。另一方面,命名的實際搜索過程是動態的,在運行時確定的——然而,Python 語言也在不斷發展,以後有可能會成為靜態的「編譯」時確定,所以不要依賴動態解析!(事實上,局部變數已經是靜態確定了。)
Python 的一個特別之處在於:如果沒有使用 global 語法,其賦值操作總是在最里層的作用域。賦值不會復制數據,只是將命名綁定到對象。刪除也是如此:del x 只是從局部作用域的命名空間中刪除命名 x 。事實上,所有引入新命名的操作都作用於局部作用域。特別是 import 語句和函數定義將模塊名或函數綁定於局部作用域(可以使用 global 語句將變數引入到全局作用域)。
global 語句用以指明某個特定的變數為全局作用域,並重新綁定它。nonlocal 語句用以指明某個特定的變數為封閉作用域,並重新綁定它。

B. python如圖,為啥不能這樣一層層往上聲明一個變數nonlocal、global為啥不能同時出現

因為在d的函數開頭,你使用了global a,則代表你已經將d函數中的a作為全局變數來使用,因此d函數的變數層中不存在a。
nonlocal a會往上最近一層局部作用域尋找局部變數 a,但是d函數的變數層中不存在a,所以報錯。

C. python語言保留字有哪些

保留字是Python語言中一些已經被賦予特定意義的單詞,這就要求開發者在開發程序時,不能用這些保留字作為標識符給變數、函數、類、模板以及其他對象命名。

Python包含的保留字可以執行如下命令進行查看:

>>> import keyword

>>> keyword.kwlist

['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

python保留字

需要注意的是,由於Python是嚴格區分大小寫的,保留字也不例外。所以,我們可以說if是保留字,但IF就不是保留字。

在實際開發中,如果使用Python中的保留字作為標識符,則解釋器會提示「invalid syntax」的錯誤信息

D. python中為什麼選nonlocal 狀態保持備選項

考慮到嵌套函數引入的額外復雜性,可能會為此感到煩惱。在很多程序中,狀態信息是非常重要的。雖然函數可以返回結果,但它們的局部變數一般不會保留,而我們有時需要讓這些值在調用之間被保持。此外按照不同的使用場景,其他一些應用程序又要求這些值不同。如前所述,Python中有各種不同的方式來「記住」跨函數和方法調用的信息。盡管各有利弊,nonlocal確實增強了對外層作用域的引用: nonlocal語句允許在內存中保持可更改狀態的多個副本。它解決了那些類和全局變數不需要或適用的簡單狀態記憶需求,不過函數屬性經常能夠可移植性更強地扮演相似的角色。

E. Python基本語法都有哪些

標識符


第一個字元必須是英文字母或下劃線 _ 。標識符的其他的部分由字母、數字和下劃線組成。標識符對大小寫敏感。


保留字


保留字即關鍵字,不能用作任何標識符名稱。keyword 模塊可以輸出當前版本的所有關鍵字:


import keyword


print(keyword.kwlist)


['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']


注釋


單行注釋採用#,注釋是給人看的,可以是任意內容,解釋器會忽略掉注釋。多行注釋採用'''或"""。


# print("我是注釋,不會執行")


print("正常執行代碼")


'''


這是多行注釋,用三個單引號


這是多行注釋,用三個單引號


'''


print("Hello, World!")


"""


這是多行注釋,用三個雙引號


這是多行注釋,用三個雙引號


"""


print("Hello, World!")


行與縮進


Python 使用縮進來表示代碼塊而不是大括弧 {}。縮進的空格數是可變的,但是同一個代碼塊的語句必須是相同的縮進空格數。空格數建議一般空四個。其次注意Tab和四格空格混用可能會報錯,並且這個錯誤還不容易被察覺。


輸入輸出


一般情況下都是一條語法一行,如果寫的語句很長,我們還可以使用反斜杠()來呈現多行語句。在 [], {}, 或 () 中的多行語句,則不需要反斜杠。


sentence1 = "I love " +


"python"


sentence2 = ["I", "love",


"python"]


關於Python基本語法的內容,青藤小編就和您分享到這里了。如果您對python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關於python編程的技巧及素材等內容,可以點擊本站的其他文章進行學習。

F. python中的nonlocal是不是和c語言函數中的static功能一樣

看你以後的取向了,C與C++兩者屬於博大精深型,學好了就是高手,入門其他語言很容易,但是很難學。java屬於大眾型,入門門檻低,而且學了以後應用范圍很廣,但是幾十年後誰也不敢打包票,而且轉型其他語言,特別是過程性語言不太容易。什麼語言無所謂,關鍵是要好好學,你自己抉擇吧,誰也幫不了你!

G. 求教一個python 3.x 中關於nonlocal變數的問題

按上面的代碼執行結果是:
spam 1
bam 2

執行過程:

1、f=tester(0),調用tester,用0初始化tester的state,將內部函數nested返回並賦值給f
2、f('spam'),調用f,即直接調用內部函數nested,傳入參數spam。由於nonlocal state,實際上操作的是tester的state,上面初始化過state是0,所以加1,結果是spam 1
3、f('bam'),再次調用f,上次執行後state變成1,這次再次加1,變成2,結果bam 2

H. python nonlocal 問題

displayCount函數里,Employee.empCount調用有問題!由於是自身函數調用自身變數,所以應用self.empCount形式。

I. python中用二分法遞歸的方式求列表的平均數

A=[1,2,3,4,5,6,7,8,9,10,13]
deffun2(A):
n=len(A)
s=0
deffun1(n):
nonlocals
ifn>0:
s=s+A[n-1]
n=n-1
returnfun1(n)
else:
print(s/len(A))
returnfun1(n)
fun2(A)
不知道二分法是什麼,自己想了1個

J. (python)這個i怎麼才能設置為normalize 內部函數可以互相訪問的變數 而不影響外部主程序

兩種方法

  1. 如果是python3可以食用nonlocal關鍵字,在嵌套函數中聲明i變數

  2. 如果是python2,可以使用字典或列表封裝,然後改變其中的i,而不是重新賦值

deffoo():
i=0
defprinti():
nonlocali
i=2
print1
printi()
deffoo():
i=[0]
defprinti():
i[0]=2
print1
printi()
printi
熱點內容
matlab遺傳演算法約束 發布:2025-01-18 15:31:33 瀏覽:909
果凍java 發布:2025-01-18 15:25:59 瀏覽:695
電腦與時間伺服器同步間隔 發布:2025-01-18 15:21:28 瀏覽:54
蘋果手機apple登錄密碼在手機哪裡 發布:2025-01-18 15:13:43 瀏覽:380
吃雞去哪裡下手游安卓 發布:2025-01-18 15:10:59 瀏覽:668
東方財富dk指標源碼 發布:2025-01-18 14:45:53 瀏覽:435
陌陌登陸密碼是什麼 發布:2025-01-18 14:36:54 瀏覽:848
海龜編譯器代碼 發布:2025-01-18 14:16:51 瀏覽:34
大閘蟹網站源碼 發布:2025-01-18 14:12:19 瀏覽:105
電腦伺服器日期怎麼改 發布:2025-01-18 14:05:03 瀏覽:687