9 變數高階

2021-10-19 04:15:55 字數 4221 閱讀 2883

引用的概念

python

注意:如果變數已經被定義,當各乙個變數賦值的時候,本質上是修改了資料的引用

in [1]: a = 1

in [2]: id(a)

out[2]: 140525001340832

in [3]: b = a

in [4]: id(b)

out[4]: 140525001340832

in [5]: a = 2

in [6]: id(a)

out[6]: 140525001340864

in [7]: id(b)

out[7]: 140525001340832

in [8]: b = a

in [9]: id(b)

out[9]: 140525001340864

函式的引數和返回值的傳遞

python中函式的實參/返回值都是靠引用來傳遞的

def test(num):

# 1> 定義乙個字串變數

result = "hello"

# 2> 將字串變數返回,返回的是資料的引用,而不是資料本身

return result

# 1 定義乙個變數

a = 10

# 資料位址實質上就是乙個數字

# 2 呼叫test函式

# 呼叫函式時,本質上傳遞的是實參儲存資料的引用,而不是實參儲存的資料

# 如果有函式返回值,但是沒有定義變數接收

# 程式不會報錯,但是無法獲得返回結果

r = test(a)

輸出結果:

可變型別,記憶體中的資料可以被修改

# 不可變型別

in [1]: a = 1

in [2]: a = "hello"

in [3]: a = ("zhangsan", 18, 175)

# 可變型別

-- 列表

in [1]: a = [1,2,3]

in [2]: a

out[2]: [1, 2, 3]

in [3]: id (a)

out[3]: 140600194451208

in [5]: a

out[5]: [1, 2, 3, 4]

in [6]: id (a)

out[6]: 140600194451208

in [7]: a.remove(1)

in [8]: a

out[8]: [2, 3, 4]

in [9]: id (a)

out[9]: 140600194451208

in [10]: a.clear()

in [11]: a

out[11]:

in [12]: id (a)

out[12]: 140600194451208

in [13]: a =

in [14]: a

out[14]:

in [15]: id (a)

out[15]: 140600194097096

-- 字典

in [1]: d =

in [2]: d

out[2]:

in [3]: id(d)

out[3]: 140162946878848

in [4]: d["age"] = 18

in [5]: d

out[5]:

in [6]: id(d)

out[6]: 140162946878848

in [7]: d.pop("name")

out[7]: 'xiaoming'

in [8]: d

out[8]:

in [9]: id(d)

out[9]: 140162946878848

in [10]: d.clear()

in [11]: d

out[11]: {}

in [12]: id(d)

out[12]: 140162946878848

in [13]: d = {}

in [14]: id(d)

out[14]: 140162929482200

注意:字典的key只能使用不可變型別的資料,不能使用可變型別資料作為字典中的key

注意

通過方法改變可變型別的資料是不會改變這個資料在記憶體中的位址(引用)

如果給乙個可變型別的變數,賦值了乙個新的資料,引用會修改

雜湊(hash)

hash是一種演算法,其作用就是提取資料的特徵碼(指紋)

python中,設定字典的鍵值對時,會首先對key進行hash已決定如何在記憶體中儲存字典的資料,以方便後續對字典的操作:增、刪、改、查

區域性變數

區域性變數的作用

def demo1():

num = 10

print("demo1函式內部的變數是num=%d" % num)

# print(num) 程式會報錯,區域性變數不能在其他地方使用

demo1()

區域性變數的生命週期
def demo1():

# 1> 出生:執行了下方**後,才會被建立

# 2> 死亡:函式執行完成之後

num = 10

print("demo1函式內部的變數是num=%d" % num)

demo1()

全域性變數
num = 10

def demo1():

print("demo1 ==> %d" % num)

def demo2():

print("demo2 ==> %d" % num)

demo1()

demo2()

注意事項

1)函式執行時,需要處理變數時 會:

首先查詢函式內部是否存在指定名稱的區域性變數,如果有,直接使用

如果沒有,查詢函式外部是否存在指定名稱的全域性變數,如果有,直接使用

如果還沒有,程式報錯

2)函式不能直接修改全域性變數的引用

# 全域性變數

num = 10

def demo1():

# 希望修改全域性變數的值

# 在python中,是不允許直接修改全域性變數的值

# 如果使用賦值語句,會在函式內部定義乙個區域性變數

num = 20

print("demo1 ==> %d" % num)

def demo2():

print("demo2 ==> %d" % num)

demo1()

demo2()

# 會輸出:

demo1 ==> 20

demo2 ==> 10

3)在函式內部修改全域性變數的值

# 全域性變數

num = 10

def demo1():

# 希望修改全域性變數的值——使用global宣告一下變數即可

# global關鍵字會告訴直譯器後面的變數是乙個全域性變數

# 在使用賦值語句時,就不會建立區域性變數

global num

num = 20

print("demo1 ==> %d" % num)

def demo2():

print("demo2 ==> %d" % num)

demo1()

demo2()

# 會輸出:

demo1 ==> 20

demo2 ==> 20

3)全域性變數的位置

注意: 在開發時,應該把模組中的所有全域性變數定義在所有函式的上方,這樣就能夠保證所有的函式都能夠正常的訪問到每乙個全域性變數

**結構示意圖

4)全域性變數的命名建議

Python學習(9) 高階變數型別 公共方法

python 包含了以下內建函式 函式描述 備註len item 計算容器中元素個數 del item 刪除變數 del 有兩種方式 max item 返回容器中元素最大值 如果是字典,只針對 key 比較 min item 返回容器中元素最小值 如果是字典,只針對 key 比較 cmp item1...

9 高階許可權

高階許可權 suid,sgid,sticky suid 針對二進位制檔案 可執行檔案 提權 讓普通使用者對檔案有超級使用者的許可權 sgid sticky 問題1 為什麼會失敗!root fanhua ll root file1.txt rw r r 1 root root 4 7月 27 14 1...

python學習筆記 9 高階變數5 公共方法

len 計算容器中元素的個數 del 刪除變數 max 返回容器中元素的最大值,如果是字典,只比較key值 min 返回容器中元素的最小值 cmp item1,item2 比較兩個值。python3x取消了cmp函式,可以用比較運算子進行比較,字典無法進行比較。字串比較符合以下規則 0 a a nu...