日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

global与nonlocal关键字

發布時間:2024/4/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 global与nonlocal关键字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 在Python中,當引用一個變量的時候,對這個變量的搜索是按找本地作用域(Local)、嵌套作用域(Enclosing function locals)、全局作用域(Global)、內置作用域(builtins模塊)的順序來進行的,即所謂的LEGB規則。?

然而當在一個函數內部為一個變量賦值時,并不是按照上面所說LEGB規則來首先找到變量,之后為該變量賦值。在Python中,在函數中為一個變量賦值時,有下面這樣一條規則:

“當在函數中給一個變量名賦值是(而不是在一個表達式中對其進行引用),Python總是創建或改變本地作用域的變量名,除非它已經在那個函數中被聲明為全局變量. ”

global適用于函數內部修改全局變量的值

nonlocal適用于嵌套函數中內部函數修改外部變量的值

舉例說明:

x = 1 def f1():x = 2 f1() print(x) #輸出 1

在上面的程序當中先定義了一個全局變量x=1,也就是說現在全局名稱空間現在有了一個x=1,接下來在f1函數當中又給x賦值為2,但是因為在f1函數當中沒有變量x,所以python會在f1函數這個本地作用域創建一個變量x,也就是說這個x只存在于本地作用域,并非是全局變量中的那個x。而后運行程序打印的那個x會優先找到全局變量中的x,所以最后會輸出1。

如果想在函數內部修改全局變量x,就需要用到global關鍵字:

x = 1 def f1():global xx = 2 f1() print(x) #輸出 2

使用global關鍵字就是在告訴python,我們要在局部作用域使用全局變量,所以在x=2語句當中,python不會再在本地作用域中再新建一個變量,而是直接使用全局變量中的x變量

?

nonlocal關鍵字的作用與global類似,舉例:

def f1():a = 250def f2():a = 520f2()print(a) f1() # 輸出 250

在這個程序當中,在嵌套的f2函數當中,對變量a的賦值,同樣因為在本地作用域中沒有x,python會在f2函數的內存空間在創建一個新的變量a,如果想要修改嵌套作用域中的a,就要使用關鍵字nonlocal

def f1():a = 250def f2():nonlocal aa = 520f2()print(a) f1() # 輸出 520

使用了nonlocal關鍵字就是告訴python,我們要在f2函數中使用外部變量a,所以我們在f2函數內對a變量進行賦值時就使用的是外部變量a,而不是重新創建出來的變量

注意:使用global關鍵字修飾的變量之前可以并不存在,而使用nonlocal關鍵字修飾的變量在嵌套作用域中必須已經存在,否則會報錯。

?

轉載于:https://www.cnblogs.com/Yang-Sen/p/9135582.html

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的global与nonlocal关键字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。