麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Python > 正文

Python中 Global和Nonlocal的用法詳解

2024-09-09 19:03:40
字體:
來源:轉載
供稿:網友

nonlocal 和 global 也很容易混淆。簡單記錄下自己的理解。

解釋

global

總之一句話,作用域是全局的,就是會修改這個變量對應地址的值。

global 語句是一個聲明,它適用于整個當前代碼塊。 這意味著列出的標識符將被解釋為全局變量。 盡管自由變量可能指的是全局變量而不被聲明為全局變量。

global 語句中列出的名稱不得用于該全局語句之前的文本代碼塊中。

global 語句中列出的名稱不能定義為形式參數,也不能在 for 循環控制目標、 class 定義、函數定義、 import 語句或變量注釋中定義。

當前的實現并不強制執行這些限制,但是程序不應該濫用這種自由,因為未來的實現可能會強制執行這些限制,或者悄悄地改變程序的含義。

程序員注意: global 是指向解析器的指令。 它僅適用于與全局語句同時解析的代碼。 特別是,包含在提供給內置 exec() 函數的字符串或代碼對象中的全局語句不會影響包含函數調用的代碼塊,而且這種字符串中包含的代碼不會受包含函數調用的代碼中的全局語句的影響。 eval() 和 compile() 函數也是如此。

一、global

1、global關鍵字用來在函數或其他局部作用域中使用全局變量。但是如果不修改全局變量也可以不使用global關鍵字。

gcount = 0def global_test():  gcount+=1  print (gcount)global_test()

以上代碼會報錯:第一行定義了全局變量,在內部函數中又對外部函數進行了引用并修改,那么python會認為它是一個局部變量,有因為內部函數沒有對其gcount進行定義和賦值,所以報錯。

2、如果局部要對全局變量修改,則在局部聲明該全局變量

gcount = 0def global_test():  global gcount  gcount+=1  print (gcount)global_test()

以上輸出為:1

3、如果局部不聲明全局變量,并且不修改全局變量,則可以正常使用

gcount = 0def global_test():  print (gcount)global_test()

以上輸出為:0

 二、nonlocal

 nonlocal

只在閉包里面生效,作用域就是閉包里面的,外函數和內函數都影響,但是閉包外面不影響。

nonlocal 語句使列出的標識符引用除 global 變量外最近的封閉范圍中的以前綁定的變量。 這很重要,因為綁定的默認行為是首先搜索本地名稱空間。 該語句允許封裝的代碼將變量重新綁定到除全局(模塊)作用域之外的本地作用域之外。

nonlocal 語句中列出的名稱與 global 語句中列出的名稱不同,它們必須引用封閉范圍中已經存在的綁定(無法明確確定應在其中創建新綁定的范圍)。

1、 nonlocal聲明的變量不是局部變量,也不是全局變量,而是外部嵌套函數內的變量

def make_counter():  count = 0  def counter():    nonlocal count    count += 1    return count  return counter   def make_counter_test(): mc = make_counter() print(mc()) print(mc()) print(mc())make_counter_test()

  以上輸出為:

1

2

3

三、混合使用

def scope_test():  def do_local():    spam = "local spam" #此函數定義了另外的一個spam字符串變量,并且生命周期只在此函數內。此處的spam和外層的spam是兩個變量,如果寫出spam = spam + “local spam” 會報錯  def do_nonlocal():    nonlocal spam    #使用外層的spam變量    spam = "nonlocal spam"  def do_global():    global spam    spam = "global spam"  spam = "test spam"  do_local()  print("After local assignmane:", spam)  do_nonlocal()  print("After nonlocal assignment:",spam)  do_global()  print("After global assignment:",spam) scope_test()print("In global scope:",spam)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲视屏在线观看 | 亚洲草逼视频 | 日韩精品一二三 | 久久久久久久久久久久久久国产 | a网站在线 | 看免费黄色大片 | 国产精品性夜天天视频 | av电影在线网 | 国产精品美女久久久免费 | 又黄又爽免费无遮挡在线观看 | 欧美一区二区三区免费观看 | 久久久久久麻豆 | 国产精品中文在线 | 欧美 中文字幕 | 91精品国产一区二区三区四区在线 | 鲁人人人鲁人人鲁精品 | 久啪视频| 看片一区| 91久久久久 | 嗯~啊~弄嗯~啊h高潮视频 | 爱操影院 | 黄色av网站免费看 | 综合日韩av | 男女隐私免费视频 | 久久99精品国产自在现线 | 欧美一级黄色网 | 98国内自拍在线视频 | 亚洲视频在线视频 | 久久九九热re6这里有精品 | 人成免费网站 | 国产一区二区在线观看视频 | www国产成人免费观看视频,深夜成人网 | 美女黄色影院 | 亚洲第一色片 | 国产成人精品区 | 羞羞草视频 | 一级黄色av电影 | 国产在线色 | 国产在线精品一区二区三区不卡 | 国产成人av一区 | 毛片免费看的 |