python局部变量想作用于全局_python 局部和全局作用域
在函數內賦值的變量,處于該函數的“局部作用域”。在所有函數之外賦值的變量,屬于“全局作用域”。處于局部作用域的變量,被稱為“局部變量”。處于全局作用域的變量,被稱為“全局變量”。一個變量必是其中一種,不能既是局部的又是全局的。
可以將“作用域” 看成是變量的容器。當作用域被銷毀時,所有保存在該作用域內的變量的值就被丟棄了。只有一個全局作用域, 它是在程序開始時創建的。如果程序終止, 全局作用域就被銷毀,它的所有變量就被丟棄了。
一個函數被調用時, 就創建了一個局部作用域。在這個函數內賦值的所有變量,存在于該局部作用域內。該函數返回時,這個局部作用域就被銷毀了, 這些變量就丟失了。
結論:全局作用域中的代碼不能使用任何局部變量;但是,局部作用域可以訪問全局變量;一個函數的局部作用域中的代碼,不能使用其他局部作用域中的變量;在不同的作用域中,你可以用相同的名字命名不同的變量。也就是說,可以有一個名為 color
的局部變量,和一個名為 color 的全局變量。
def cred():
color='red'
print(color)
cn()
def cgreen():
color='green'
print(color)
cred()
print(color)
def cn():
print(color)
color='blue'
cgreen()
print(color)
green
red
blue
green
blue
當函數想要改變全局變量時,需要使用 global。
def setRed():
global color
color='red'
def setGreen():
global color
color='green'
color='blue'
print(color)
setRed()
print(color)
setGreen()
print(color)
blue
red
green
區分一個變量是處于局部作用域還是全局作用域:
1.如果變量在全局作用域中使用(即在所有函數之外),它就總是全局變量。
2.如果在一個函數中,有針對該變量的 global 語句,它就是全局變量。
3.如果該變量用于函數中的賦值語句,它就是局部變量。
4.如果該變量沒有用在賦值語句中,它就是全局變量。
def setRed():
global color
color='red'
def setGreen():
global color
color='green'
def cn():
print(color)
color='blue'
cn()
setRed()
cn()
setGreen()
cn()
blue
red
green
在一個函數中, 一個變量要么總是全局變量, 要么總是局部變量。函數中的代碼沒有辦法先使用名為 color 的局部變量, 稍后又在同一個函數中使用全局 color 變量。如果想在一個函數中修改全局變量中存儲的值,就必須對該變量使用 global 語句。
在一個函數中, 如果試圖在局部變量賦值之前就使用它,Python 看到 setGreen 函數中有針對 color 的賦值語句,因此認為 color 變量是局部變量。但是因為 print(color)的執行在 color 賦值之前,局部變量 color 并不存在。 Python 不會退回到使用
全局 color 變量。
def setRed():
print(color) ## name 'color' is used prior to global declaration
global color
color='red'
color='blue'
setRed()
def setGreen():
print(color) ## UnboundLocalError: local variable 'color' referenced before assignment
color='green'
color='blue'
setGreen()
總結
以上是生活随笔為你收集整理的python局部变量想作用于全局_python 局部和全局作用域的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 700c corsa_JAVA
- 下一篇: java 线程 状态 图_Java线程中