局部變量和全局變量
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、網頁空間、營銷軟件、網站建設、魯山網站維護、網站推廣。
在 Python 中
注意:如果變量已經被定義,當給一個變量賦值的時候,本質上是 修改了數(shù)據(jù)的引用
變量 不再對之前的數(shù)據(jù)引用
變量 改為對新賦值的數(shù)據(jù)引用
在 Python 中,變量的名字類似于 便簽紙貼在 數(shù)據(jù)上
代碼 | 圖示 |
---|---|
a = 1 |
代碼 | 圖示 |
---|---|
a = 2 |
代碼 | 圖示 |
---|---|
b = a |
變量 b 是第 2 個貼在數(shù)字 2 上的標簽
在 Python 中,函數(shù)的 實參/返回值都是是靠 引用來傳遞來的
def test(num):
print("-" * 50)
print("%d 在函數(shù)內的內存地址是 %x" % (num, id(num)))
result = 100
print("返回值 %d 在內存中的地址是 %x" % (result, id(result)))
print("-" * 50)
return result
a = 10
print("調用函數(shù)前 內存地址是 %x" % id(a))
r = test(a)
print("調用函數(shù)后 實參內存地址是 %x" % id(a))
print("調用函數(shù)后 返回值內存地址是 %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("修改數(shù)據(jù)后的內存地址 %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("修改數(shù)據(jù)后的內存地址 %d" % id(demo_dict))
注意:
- 字典的 key 只能使用不可變類型的數(shù)據(jù)
- 可變類型的數(shù)據(jù)變化,是通過 方法來實現(xiàn)的
- 如果給一個可變類型的變量,賦值了一個新的數(shù)據(jù),引用會修改
變量 不再對之前的數(shù)據(jù)引用
變量 改為對新賦值的數(shù)據(jù)引用
提示:在其他的開發(fā)語言中,大多 不推薦使用全局變量—— 可變范圍太大,導致程序不好維護!
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")
注意:函數(shù)執(zhí)行時,需要處理變量時 會:
- 首先查找 函數(shù)內部是否存在 指定名稱 的局部變量,如果有,直接使用
- 如果沒有,查找 函數(shù)外部是否存在 指定名稱 的全局變量,如果有,直接使用
- 如果還沒有,程序報錯!
提示:在其他的開發(fā)語言中,大多 不推薦使用全局變量—— 可變范圍太大,導致程序不好維護!
num = 10
def demo1():
print("demo1" + "-" * 50)
# 只是定義了一個局部變量,不會修改到全局變量,只是變量名相同而已
num = 100
print(num)
def demo2():
print("demo2" + "-" * 50)
print(num)
demo1()
demo2()
print("over")
注意:只是在函數(shù)內部定義了一個變量名相同的局部變量而已 —— 在函數(shù)內部不能直接修改全局變量的值
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,是在調用函數(shù)之后,才定義的,在執(zhí)行函數(shù)時,變量還沒有定義,所以程序會報錯!