python 全域性變數和區域性變數

2021-08-20 08:46:39 字數 3093 閱讀 7844

在乙個檔案頂部定義的變數可以供該檔案中任意函式呼叫

1.定義全域性變數

name = '全域性變數' #定義全域性變數

def name():

pass

name()

2.呼叫全域性變數

name = '全域性變數' #定義全域性變數

def name():

print('name()',name)#呼叫全域性變數

name()

3.修改全域性變數

name = '123' #定義全域性變數

def change_name():

#name = '213' #直接進行修改的話,其實是修改的名為name的區域性變數

gobal name #宣告此處的name是全域性變數

name = '213' #修改全域性變數

print(name)

change_name()

print(name)

區域性變數是在某個函式中宣告的僅限於當前函式使用的變數。

def chang_name():

name = "name" #定義區域性變數

name = 'lastname' #修改區域性變數

print('name()',name) #呼叫區域性變數

print('py',name) #會報錯,name僅限於chang_name函式使用。

1.有宣告區域性變數

name = ["a" , 'b']

def test1():

name = 'c'

print(name) #使用的是區域性變數

test1()

2.無宣告區域性變數

name = ["a" , 'b']

def test2():

print(name) #使用的是全域性變數

test2()

1.有宣告區域性變數

def test3():#存在多個同名變數,會報錯。如果需要使用全域性變數,將其寫在前面。

name = 'c'

global name

print(name)

test3()

2.無宣告區域性變數

name = ["a" , 'b']

def test4():

global name

name = [1 , 2] #可直接對全域性變數進行修改,變數實質上就是全域性變數

print(name)

test4()

為避免全域性變數與區域性變數混淆,應將全域性變數全大些(name),區域性變數全小寫(name)。

未宣告全域性變數:

def a():

global name

name = 1

print(name) #錯誤:name 'name' is not defined global無法將不為全域性變數的區域性變數提公升至全域性變數

nonlocal在第一層函式內:

name = 'x'

def a():

global name #錯誤:no binding for nonlocal 'name' found

name = 'a'

print(name)

print(name)

a()

print(name)

nonlocal無法獲取全域性變數。函式在不被呼叫的時候只載入不執行。

基本巢狀的執行流程:

def a(): #

name = 'a' #第二步

print(name) #第三步

def b():

name = "b" #第五步

print(name) #第六步

def c():

name = 'c' #第九步

print(name) #第十部

print(name) #第七步

c() #第八步

b() #第四步

print(name) #第十一步

a() #第一步

name = 'x' #第一步

def a():

name = 'a' #第四步

def b():

global name #第六步,獲取全域性變數 name(x)

name = "b" #第七步,修改全域性變數name的值x為b

b() #第五步

print(name) #第八步輸出a的區域性變數 a

print(name) #第二步:輸出x

a() #第三步

print(name)#第九步:輸出修改後的全域性變數 b

name = 'x' #第一步

def a():

name = 'a' #第四步

def b():

nonlocal name #第六步,獲取a()的變數變數 name(a)

name = "b" #第七步,修改a()的變數name的值a為b

b() #第五步

print(name) #第八步輸出a的區域性變數 b

print(name) #第二步:輸出x

a() #第三步

print(name)#第九步:輸出全域性變數 x

global和nonlocal混合修飾:

name = 'x'

def a():

global name

name = 'a'

def b():

nonlocal name #錯誤:no binding for nonlocal 'name' found 上層函式通過global將name宣告為全域性變數,無法獲取。

name = "b"

b()

print(name)

print(name)

a()print(name)

python全域性變數和區域性變數

總體來說跟c 差不多 有一點不一樣的是,當乙個全域性變數在某一函式中出現了賦值之後,函式中使用的是相同名字的區域性變數,而全域性變數不受影響 如a 100 def f a 100 print a f 這裡,函式內部的變數名如果第一次出現,且出現在 前面,即被視為定義乙個區域性變數。而函式中的a是乙個...

python全域性變數和區域性變數

當你在函式定義內宣告變數的時候,它們與函式外具有相同名稱的其他變數沒有任何關係,即變數名稱對於函式來說是 區域性 的。這稱為變數的 作用域 所有變數的作用域是它們被定義的塊,從它們的名稱被定義的那點開始。使用區域性變數 usr bin python filename func local.py de...

Python全域性變數和區域性變數

定義在函式內部的變數擁有乙個區域性作用域,定義在函式外的擁有全域性作用域。區域性變數只能在其被宣告的函式內部訪問,而全域性變數可以在整個程式範圍內訪問。呼叫函式時,所有在函式內宣告的變數名稱都將被加入到作用域中。如下例項 total 0 這是乙個全域性變數 可寫函式說明 def sum arg1,a...