歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Python學(xué)習(xí)之global 關(guān)鍵字

發(fā)布時間:2018-04-24 13:00  回復(fù):0  查看:2509   最后回復(fù):2018-04-24 13:00  

在 Python 開發(fā)中, global 關(guān)鍵字允許修改當(dāng)前范圍之外的變量。它用于創(chuàng)建全局變量并在本地上下文中更改變量,是python中非常重要的一個知識點。本文將通過示例和大家分享 global 關(guān)鍵字的相關(guān)使用,一起來看看吧,希望對大家學(xué)習(xí)python有所幫助。
  global 關(guān)鍵字的規(guī)則
  在 Python 中,有關(guān) global 關(guān)鍵字基本規(guī)則如下:
  · 當(dāng)我們在一個函數(shù)中創(chuàng)建一個變量時,默認(rèn)情況下它是本地變量。
  · 當(dāng)我們在一個函數(shù)之外定義一個變量時,默認(rèn)情況下它是全局變量。你不必使用 global 關(guān)鍵字。
  · 我們使用 global 關(guān)鍵字在一個函數(shù)中來讀寫全局變量。
  · 在一個函數(shù)外使用 global 關(guān)鍵字沒有效果。
  使用 global 關(guān)鍵字(含示例)
  我們來舉個例子。
  示例 1:從函數(shù)內(nèi)部訪問全局變量
  c = 1 # 全局變量def add():
  print(c)
  add()
  運行程序,輸出為:
  但是我們可能有一些場景需要從函數(shù)內(nèi)部修改全局變量。
  示例 2:在函數(shù)內(nèi)部修改全局變量
  c = 1 # 全局變量def add():
  c = c + 2 # 將 c 增加 2
  print(c)
  add()
  運行程序,輸出顯示錯誤:
  UnboundLocalError: local variable 'c' referenced before assignment
  這是因為在函數(shù)中,我們只能訪問全局變量但是不能修改它。
  解決的辦法是使用 global 關(guān)鍵字。
  示例 3:使用 global 在函數(shù)中改變?nèi)肿兞?br>   c = 0 # global variable
  def add():
  global c
  c = c + 2 # 將 c 增加 2
  print("Inside add():", c)
  add()
  print("In main:", c)
  運行程序,輸出為:
  Inside add(): 2In main: 2
  在上面的程序中,我們在 add() 函數(shù)中定義了 c 將其作為全局關(guān)鍵字。
  然后,我們給變量 c 增加 2 ,即 c = c + 2 。之后,我們調(diào)用了 add() 函數(shù)。最后,打印全局變量 c 。
  正如我們所看到的,在函數(shù)外的全局變量也發(fā)生了變化, c = 2 。
  Python 模塊中的全局變量
  在 Python 中,我們創(chuàng)建一個單獨的模塊 config.py 來保存全局變量并在同一個程序中的 Python 模塊之間共享信息。
  以下是如何通過 Python 模塊共享全局變量。
  示例 4:在Python模塊中共享全局變量
  創(chuàng)建 config.py 文件來存儲全局變量
  a = 0b = "empty"
  創(chuàng)建 update.py 文件來改變?nèi)肿兞?br>   import config
  config.a = 10config.b = "alphabet"
  創(chuàng)建 main.py 文件來測試其值的變化
  import configimport update
  print(config.a)print(config.b)
  運行 main.py ,輸出為:
  10
  alphabet
  在上面,我們創(chuàng)建了三個文件: config.py , update.py 和 main.py 。
  在 config.py 模塊中保存了全局變量 a 和 b 。在 update.py 文件中,我們導(dǎo)入了 config.py 模塊并改變了 a 和 b 的值。同樣,在 main.py 文件,我們導(dǎo)入了 config.py 和 update.py 模塊。最后,我們打印并測試全局變量的值,無論它們是否被改變。
  在嵌套函數(shù)中的全局變量
  以下是如何在嵌套函數(shù)中使用全局變量。
  示例 5:在嵌套函數(shù)中使用全局變量
  def foo():
  x = 20
  def bar():
  global x
  x = 25
  print("Before calling bar: ", x)
  print("Calling bar now")
  bar()
  print("After calling bar: ", x)
  foo()
  print("x in main : ", x)
  輸出為:
  Before calling bar: 20
  Calling bar now
  After calling bar: 20
  x in main : 25
  在上面的程序中,我們在一個嵌套函數(shù) bar() 中聲明了全局變量。在 foo() 函數(shù)中, 變量x 沒有全局關(guān)鍵字的作用。
  調(diào)用 bar() 之前和之后, 變量 x 取本地變量的值,即 x = 20 。在 foo() 函數(shù)之外,變量 x 會取在函數(shù) bar() 中的值,即 x = 25 。這是因為在 bar() 中,我們對 x 使用 global 關(guān)鍵字創(chuàng)建了一個全局變量(本地范圍)。
  如果我們在 bar() 函數(shù)內(nèi)進(jìn)行了任何修改,那么這些修改就會出現(xiàn)在本地范圍之外,即 foo() 。


來源:網(wǎng)絡(luò)
您還未登錄,請先登錄

熱門帖子

最新帖子

?