1. 程式人生 > >Python3——局部變量和全局變量

Python3——局部變量和全局變量

情況 png oba 生效 span nbsp ima mov 重新

在函數裏定義的變量就叫局部變量,定義在函數外部的一級代碼的變量叫全局變量

技術分享圖片

結果:

jake
alex

兩個變量雖然都叫name但不是一回事,互不相幹

如果函數內沒有定義與全局變量重名的局部變量,在函數內是可以調用該名稱的全局變量的

name = ‘alex‘

def change_name():
    #name = ‘jake‘
    print(name)

change_name()
print(name)

結果:

alex
alex

總結:

1、(函數內查找調用變量)優先級:局部變量 > 全局變量(如果全局和局部都有一個相同名字的變量的情況下)

2、在函數外是不能調用函數內的變量(局部變量),局部變量只能局部生效

3、在函數內部可以引用全局變量,而不能對全局變量重新賦值,如果要在函數內修改全局變量而不是重新定義一個新的局部變量,就要用到global(一般情況下不建議使用,因為在這個函數內改了全局變量,可能會影響到其他函數調用該全局變量)

name = ‘alex‘

def change_name():
    global name   #先聲明
    name = ‘jake‘   #再修改,兩者順序不能顛倒
    print(name)

change_name()
print(name)

 結果:

jake
jake

3.1、上面的例子我們只是對字符串進行了測試,要對一個字符串全局變量重新賦值就要用到global,但對於列表、集合、字典,雖然不能重新賦值(不用global的前提下),但可以重新修改其中的元素:

list = [‘alex‘,‘jake‘,‘rain‘]
dict = {‘alex‘:1,‘jake‘:2,"rain":3}
set = {1,2,3,4,5}

def change_name():
    list[1] = ‘cody‘
    dict[‘jake‘] = 4
    set.remove(5)
    print(list)
    print(dict)
    print(set)
    
change_name()
print(list)
print(dict)
print(set)

 結果:

[alex, cody, rain]
{
alex: 1, jake: 4, rain: 3} {1, 2, 3, 4} [alex, cody, rain] {alex: 1, jake: 4, rain: 3} {1, 2, 3, 4}

因為全局變量中的列表、集合、字典有一個內存地址,裏面的元素有各自有一個內存地址,在調用這個變量的時候,整體的內存地址不能被修改,但是裏面各元素的內存地址可以被修改

元組本身不可以被修改,但是元組內如果包含列表、集合、字典,那這些列表、集合、字典可以被修改

4、字符串、數字、布爾不能被直接,列表、集合、字典可以被修改,元組看情況

Python3——局部變量和全局變量