python
中
注意:如果變數已經被定義,當給乙個變數賦值的時候,本質上是修改了資料的引用在
python
中,變數的名字類似於便簽紙貼在資料上
**圖示
a = 1
[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-oxr6okha-1587437433304)(media/14982751015713/004_a1tag.png)]
**圖示
a = 2
[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-7szagxji-1587437433306)(media/14982751015713/005_a2tag.png)][外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-rxpwwzco-1587437433306)(media/14982751015713/005_1.png)]
**圖示
b = a
[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-2lwmjbxr-1587437433308)(media/14982751015713/006_ab2tag.png)]
變數在b
是第 2 個貼在數字2
上的標籤
python
中,函式的實參/返回值都是是靠引用來傳遞來的
def
test
(num)
:print
("-"*50
)print
("%d 在函式內的記憶體位址是 %x"
%(num,
id(num)))
result =
100print
("返回值 %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 =
1a =
"hello"
a =[1,
2,3]
a =[3,
2,1]
demo_list =[1
,2,3
]print
("定義列表後的記憶體位址 %d"%id
(demo_list)
)999
)demo_list.pop(0)
demo_list.remove(2)
demo_list[0]
=10print
("修改資料後的記憶體位址 %d"%id
(demo_list)
)demo_dict =
print
("定義字典後的記憶體位址 %d"%id
(demo_dict)
)demo_dict[
"age"]=
18demo_dict.pop(
"name"
)demo_dict[
"name"]=
"老王"
print
("修改資料後的記憶體位址 %d"%id
(demo_dict)
)
注意:字典的key
只能使用不可變型別的資料
注意
可變型別的資料變化,是通過方法來實現的
如果給乙個可變型別的變數,賦值了乙個新的資料,引用會修改
雜湊
是一種演算法,其作用就是提取資料的特徵碼(指紋)在python
中,設定字典的鍵值對時,會首先對key
進行hash
已決定如何在記憶體中儲存字典的資料,以方便後續對字典的操作:增、刪、改、查
區域性變數的作用
def
demo1()
: num =
10print
(num)
num =
20print
("修改後 %d"
% num)
defdemo2()
: num =
100print
(num)
demo1(
)demo2(
)print
("over"
)
區域性變數的生命週期# 定義乙個全域性變數
num =
10def
demo1()
:print
(num)
defdemo2()
:print
(num)
demo1(
)demo2(
)print
("over"
)
注意:函式執行時,需要處理變數時會:
首先查詢函式內部是否存在指定名稱 的區域性變數,如果有,直接使用如果沒有,查詢函式外部是否存在指定名稱 的全域性變數,如果有,直接使用如果還沒有,程式報錯!
1) 函式不能直接修改全域性變數的引用
num =
10def
demo1()
:print
("demo1"
+"-"*50
)# 只是定義了乙個區域性變數,不會修改到全域性變數,只是變數名相同而已
num =
100print
(num)
defdemo2()
:print
("demo2"
+"-"*50
)print
(num)
demo1(
)demo2(
)print
("over"
)
注意:只是在函式內部定義了乙個區域性變數而已,只是變數名相同 —— 在函式內部不能直接修改全域性變數的值2) 在函式內部修改全域性變數的值
num =
10def
demo1()
:print
("demo1"
+"-"*50
)# global 關鍵字,告訴 python 直譯器 num 是乙個全域性變數
global num
# 只是定義了乙個區域性變數,不會修改到全域性變數,只是變數名相同而已
num =
100print
(num)
defdemo2()
:print
("demo2"
+"-"*50
)print
(num)
demo1(
)demo2(
)print
("over"
)
3) 全域性變數定義的位置a =
10def
demo()
:print
("%d"
% a)
print
("%d"
% b)
print
("%d"
% c)
b =20
demo(
)c =
30
注意
**結構示意圖如下
[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-tipn7b02-1587437433310)(media/14982751015713/001_%e4%bb%a3%e7%a0%81%e7%bb%93%e6%9e%84%e7%a4%ba%e6%84%8f%e5%9b%be.png)]
4) 全域性變數命名的建議
python 之變數高階
在python中 注意 如果變數已經被定義,當給乙個變數賦值的時候,本質上是修改了資料的引用 在python中,變數的名字類似於便簽紙貼在資料上 圖示 圖示 圖示 變數b是第 2 個貼在數字2上的標籤 在python中,函式的實參 返回值都是是靠引用來傳遞來的 def test num print ...
python變數高階(理解)
在python中 注意 如果變數已經被定義,當給乙個變數賦值的時候,本質上是修改了資料的引用 在python中,變數的名字類似於便簽紙貼在資料上 圖示 a 1 圖示 a 2 圖示 b a 變數b是第 2 個貼在數字2上的標籤 在python中,函式的實參 返回值都是是靠引用來傳遞來的 def tes...
Python變數高階(理解)
在python中 注意 如果變數已經被定義,當給乙個變數賦值的時候,本質上是修改了資料的引用 在python中,函式的實參 返回值都是是靠引用來傳遞來的 def test num print 50 print d 在函式內的記憶體位址是 x num,id num result 100print 返回...