中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Global和Nonlocal怎么在Python中使用

發布時間:2021-01-11 15:48:50 來源:億速云 閱讀:127 作者:Leah 欄目:開發技術

Global和Nonlocal怎么在Python中使用?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

global

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

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

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

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

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

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

Global和Nonlocal怎么在Python中使用

一、global

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

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

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

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

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

以上輸出為:1

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

gcount = 0
def 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)

以上輸出為:

After local assignmane: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam

關于 Global和Nonlocal怎么在Python中使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海安县| 彭阳县| 西贡区| 简阳市| 汶上县| 和田市| 阿克苏市| 万宁市| 泾川县| 板桥市| 武功县| 克拉玛依市| 弥渡县| 崇阳县| 伊金霍洛旗| 旅游| 通江县| 和林格尔县| 密云县| 长阳| 淮南市| 乐都县| 南漳县| 娄烦县| 阳东县| 遵化市| 缙云县| 东明县| 岳阳县| 岚皋县| 尼玛县| 延川县| 马公市| 安顺市| 石河子市| 勃利县| 资兴市| 金乡县| 平果县| 江门市| 右玉县|