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

2021-08-11 12:26:29 字數 1934 閱讀 9449

定義在函式內部的變數擁有乙個區域性作用域,定義在函式外的擁有全域性作用域。

區域性變數只能在其被宣告的函式內部訪問,而全域性變數可以在整個程式範圍內訪問。呼叫函式時,所有在函式內宣告的變數名稱都將被加入到作用域中。如下例項:

total = 0; # 這是乙個全域性變數

# 可寫函式說明

def sum( arg1, arg2 ):

#返回2個引數的和."

total = arg1 + arg2; # total在這裡是區域性變數.

#在函式中 如果對乙個和全域性變數名相同的變數進行=value的時候,預設是定義乙個變數

#只不過這個變數的名字和全域性變數的名字相同罷了

print ("函式內是區域性變數 : ", total)

return total;

#呼叫sum函式

sum( 10, 20 );

print ("函式外是全域性變數 : ", total)

以上例項輸出結果:

函式內是區域性變數 : 30

函式外是全域性變數 : 0

當內部作用域想修改外部作用域的變數時,就要用到global和nonlocal關鍵字了。

以下例項修改全域性變數 num:

num = 1

def fun1():

global num # 使用global用來對乙個全域性變數的宣告,那麼這個函式中的num就不是定義乙個區域性變數,而是

#對全域性變數進行修改

print(num)

num = 123

print(num)

fun1()

以上例項輸出結果:

1123

列表是當全域性變數的

如下面的例子

nums = [11,22,33]

infor =

def test():

#for num in nums:

# print(num)

infor['age'] = 18

def test2():

print(nums)

print(infor)

test() #[11, 22, 33, 44]

test2() #

如果要修改巢狀作用域(enclosing 作用域,外層非全域性作用域)中的變數則需要 nonlocal 關鍵字了,如下例項:

def outer():

num = 10

def inner():

nonlocal num # nonlocal關鍵字宣告

num = 100

print(num)

inner()

print(num)

outer()

以上例項輸出結果:

100100

另外有一種特殊情況,假設下面這段**被執行:

a = 10

def test():

a = a + 1

print(a)

test()

以上程式執行,報錯資訊如下:

traceback (most recent call last):

file "test.py", line 7, in test()

file "test.py", line 5, in test

a = a + 1

unboundlocalerror: local variable 'a' referenced before assignment

錯誤資訊為區域性作用域引用錯誤,因為 test 函式中的a 使用的是區域性,未定義,無法修改

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

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

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

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

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

在乙個檔案頂部定義的變數可以供該檔案中任意函式呼叫 1.定義全域性變數 name 全域性變數 定義全域性變數 def name pass name 2.呼叫全域性變數 name 全域性變數 定義全域性變數 def name print name name 呼叫全域性變數 name 3.修改全域性變數...