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

2021-08-04 16:25:00 字數 1665 閱讀 1557

#[demo1]

num = 100

deffunc

():

newvalue = 123

#乙個全新的區域性變數newvalue

print(newvalue)

func() #輸出區域性變數newvalue 即新的區域性變數

#[demo2]

num = 100

deffunc

():

num= 123

#宣告乙個全新的區域性變數num,雖然名字和外界的全部變數相同 但是是新的乙個變數且是區域性有效的。遮蔽了外面的同名的全部變數

print(num)

func() #輸出區域性變數num=123 即新的區域性變數。

#[demo1]

num = 100

deffunc

():

x = num+200

#使用值做引數,那麼其實是copy乙份num全部變數的值

print(x)

print(id(num)) #id值

func() #輸出300 即沒有區域性變數宣告 那麼使用就是全域性變數

print(id(num)) #id值

#[demo2]

list = [100]

deffunc

():

print(list)

print(id(list))

func() #輸出[100,200]

因為本身是不能的,你修改然後賦值的時候會出現矛盾。即你涉及到賦值var = *** 修改的時候,那麼會被語法解析會宣告乙個新的區域性變數var。當然物件型別除外,你可以直接操作他的元素。
#[demo1]

num = 100

deffunc

():

num= 123

#本來你的意圖是賦值給全域性變數num,但是此處會被解析為宣告乙個全新的區域性變數num

print(id(num))

func() #輸出區域性變數newvalue 即新的區域性變數

print(id(num))

那麼怎麼辦?才能在區域性變數賦值修改全域性變數

#[demo1]

num = 100

deffunc

():global num #宣告這個num是全域性的哦。如果全域性變數已經有這個num變數那就是指的它 如果全域性沒這個num那就新定義乙個全域性變數。

num = 200

#此時此刻 凡是在函式內部num的意思始終是指全域性變數。不可能有個區域性變數叫num的。

print(num )

func()

print(num ) #輸出200 說明修改的就是全域性變數啊

#[demo2]

deffunc

():global num #宣告這個num是全域性的哦。而且恰恰是此時沒有乙個全域性變數是num。那麼如果全域性沒這個num那就新定義乙個num的全域性變數。

num = 200

print(num )

func()

print(num ) #輸出200 說明新定義了乙個全域性變數num

static全域性 區域性變數,全域性變數及區域性變數

1 static變數和全域性變數都是分配在 靜態儲存區 2 static全域性變數 static區域性變數 全域性變數和區域性變數區別 他們都是分配在 靜態儲存區內,都是在程式開始的時候初始化的,他們的區別是作用域不同,static全域性變數作用域是在申明所在的檔案中,而全域性變數是全域性的,其他檔...

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

name gongwei 要在函式裡修改全域性變數,需要用globle home earth china cq def change name home 地球 注意只有字串和單獨數值在區域性變數中修改全域性變數要用globle輔助,其他如列表 字典可以直接修改 global name name xu...

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

在python中全域性變數可以作用於所有域,而函式內部呼叫時會優先使用區域性變數,如果搜尋不到區域性變數就會在全域性中搜尋相同的變數 當然,以上並不意味著我們不能在函式內部使用全域性變數。python 的作用域規則是,變數的建立總是會建立乙個新的區域性變數但是變數的訪問 包括修改 在區域性作用域查詢...