Python 之 變數高階(理解)

2021-10-05 07:08:33 字數 4635 閱讀 9436

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 返回...