您好,登錄后才能下訂單哦!
局部變量和全局變量
在 Python 中
注意:如果變量已經被定義,當給一個變量賦值的時候,本質上是 修改了數據的引用
變量 不再 對之前的數據引用
變量 改為 對新賦值的數據引用
在 Python 中,變量的名字類似于 便簽紙 貼在 數據 上
代碼 | 圖示 |
---|---|
a = 1 |
代碼 | 圖示 |
---|---|
a = 2 |
代碼 | 圖示 |
---|---|
b = a |
變量 b 是第 2 個貼在數字 2 上的標簽
在 Python 中,函數的 實參/返回值 都是是靠 引用 來傳遞來的
def test(num):
print("-" * 50)
print("%d 在函數內的內存地址是 %x" % (num, id(num)))
result = 100
print("返回值 %d 在內存中的地址是 %x" % (result, id(result)))
print("-" * 50)
return result
a = 10
print("調用函數前 內存地址是 %x" % id(a))
r = test(a)
print("調用函數后 實參內存地址是 %x" % id(a))
print("調用函數后 返回值內存地址是 %x" % id(r))
a = 1
a = "hello"
a = [1, 2, 3]
a = [3, 2, 1]
demo_list = [1, 2, 3]
print("定義列表后的內存地址 %d" % id(demo_list))
demo_list.append(999)
demo_list.pop(0)
demo_list.remove(2)
demo_list[0] = 10
print("修改數據后的內存地址 %d" % id(demo_list))
demo_dict = {"name": "name1"}
print("定義字典后的內存地址 %d" % id(demo_dict))
demo_dict["age"] = 18
demo_dict.pop("name")
demo_dict["name"] = "name2"
print("修改數據后的內存地址 %d" % id(demo_dict))
注意:
- 字典的 key 只能使用不可變類型的數據
- 可變類型的數據變化,是通過 方法 來實現的
- 如果給一個可變類型的變量,賦值了一個新的數據,引用會修改
變量 不再 對之前的數據引用
變量 改為 對新賦值的數據引用
提示:在其他的開發語言中,大多 不推薦使用全局變量 —— 可變范圍太大,導致程序不好維護!
def demo1():
num = 10
print(num)
num = 20
print("修改后 %d" % num)
def demo2():
num = 100
print(num)
demo1()
demo2()
print("over")
# 定義一個全局變量
num = 10
def demo1():
print(num)
def demo2():
print(num)
demo1()
demo2()
print("over")
注意:函數執行時,需要處理變量時 會:
- 首先 查找 函數內部 是否存在 指定名稱 的局部變量,如果有,直接使用
- 如果沒有,查找 函數外部 是否存在 指定名稱 的全局變量,如果有,直接使用
- 如果還沒有,程序報錯!
提示:在其他的開發語言中,大多 不推薦使用全局變量 —— 可變范圍太大,導致程序不好維護!
num = 10
def demo1():
print("demo1" + "-" * 50)
# 只是定義了一個局部變量,不會修改到全局變量,只是變量名相同而已
num = 100
print(num)
def demo2():
print("demo2" + "-" * 50)
print(num)
demo1()
demo2()
print("over")
注意:只是在函數內部定義了一個變量名相同的局部變量而已 —— 在函數內部不能直接修改全局變量的值
num = 10
def demo1():
print("demo1" + "-" * 50)
# global 關鍵字,告訴 Python 解釋器 num 是一個全局變量
global num
# 只是定義了一個局部變量,不會修改到全局變量,只是變量名相同而已
num = 100
print(num)
def demo2():
print("demo2" + "-" * 50)
print(num)
demo1()
demo2()
print("over")
a = 10
def demo():
print("%d" % a)
print("%d" % b)
print("%d" % c)
b = 20
demo()
c = 30
注意
- 由于全局變量 c,是在調用函數之后,才定義的,在執行函數時,變量還沒有定義,所以程序會報錯!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。