python之全局變量與局部變量
阿新 • • 發佈:2019-02-17
類型 如果 name def 消失 小寫 恢復 app python
全局變量:
- 在書寫中頂格開始;
- 一旦定義完畢在整個文件生效;
- 在函數內如果定義了同名全局變量名,會“覆蓋”掉全局變量;
- 在函數中同名的變量,當在函數退出後消失,全局的同名變量恢復;
- 如果在函數中想修改外部的全局變量加global關鍵字;
局部變量
- 在函數、過程中定義的變量
- 只在函數、過程中有效;
#在函數中修改外部的全局變量
name="abc"
def test1():
global name
print("修改前:",name)
name="ZZZ"
print(" 修改後:",name)
test()
可變&不可變的全局變量:
- 函數中直接引用外部不可變的全局變量時,是只讀的;
- 如果引用的外部全局變量是可變類型(列表、字典),則可以對內部元素進行操作;
- 如果想修改不可變類型的,就要加global關鍵字;
- 如果在函數中定義了同名的局部變量同時又global關鍵字引用了外部的全局變量,則報錯
- (個人意見)不要同時引用,變量名那麽多,為什麽硬要把自己搞的那麽復雜,代碼可讀性那麽差
註意,變量名定義規範:
- 全局變量名一律大寫;
- 局部變量名一律小寫;
#引用外部全局變量
name="abc"
def test1():
print("name是:",name)
test1()
#操作外部可變類型的變量
name=["abc","ZZZ"]
def test1():
name.append("CCC") #當全局變量是可變類型時,無需加global關鍵字,要謹慎這種操作
print(name)
test1()
返回結果:
[‘abc‘, ‘ZZZ‘, ‘CCC‘]
#修改外部可變類型的全局變量
name=["abc","ZZZ"]
def test1():
name.append("CCC")
name[0] ="KKK"
print(name)
test1()
返回結果:
[‘KKK‘, ‘ZZZ‘, ‘CCC‘]
#內部定義之後同時引用外部全局變量,會報錯
name=["abc","ZZZ"]
def test1():
name=[1,2,3]
global name
print(name)
test1()
返回結果:
SyntaxWarning: name ‘name‘ is assigned to before global declaration
global name
[1, 2, 3]
函數嵌套中引用外部全局變量,同時定義同名內部變量,要註意這期間的變化;
下面的global引用的是最外層的全局變量,而非上層函數內的變量
例如:
name="python"
def test1():
name="Java"
def test2():
global name
name="C++"
test2()
print(name) #註意這裏的name仍舊是test1函數裏的name
print(name)
test1()
print(name)
返回結果:
python
Java
C++
nonlocal關鍵字:
- 指定上一級變量;
- 非引用全局變量;
例如:
name="python"
def test1():
name="Java"
def test2():
nonlocal name #引用上一級函數內的name
name="C++" #修改上一級函數中的name
test2()
print(name)
print(name)
test1()
print(name)
返回結果:
python
C++
python
python之全局變量與局部變量