變數的高階

2021-09-13 14:00:47 字數 2388 閱讀 9578

cpu,記憶體,硬碟

值,理解為實體的資料

變數,理解為資料的稱呼

每乙個值被創造出來,都會有乙個記憶體id號碼。類似於人的身份證號碼。

賦值操作

變數 = 值

a = 「hello」

本質是讓乙個變數名稱指向數值的記憶體位址

我們後面使用變數時,對應記憶體位址的資料就會被使用

函式傳參的本質

函式呼叫時,實參給形參傳值

實際上,本質傳的就是資料的引用(資料的記憶體id位址)

可變型別

列表字典

不可變型別

數字型別

字串元組

不可變型別

首次出現不可變型別的資料時

會先在記憶體中劃出一塊空間,存入不可變型別的資料實體,並且得到了乙個記憶體的id

然後變數獲得這個記憶體id

第二次賦值相同的值的時候,系統會發現記憶體中已經存在這個資料了。

由於該資料是不可變型別,特點就是,資料如果存在,不再建立新的記憶體空間。

如果第二次要用的話,直接使用這個資料的記憶體位址。

m = 12

n = 12

這兩個賦值操作的過程

不可變型別

a = 1

b = 1

的過程首次出現不可變型別1的時候,會在記憶體中劃出一塊空間,儲存資料1

然後1同時會獲得乙個記憶體id

變數a作為乙個標記,標籤,會指向1的記憶體地真正

我們把這種指向叫做引用

第二次b=1

第二次出現資料的1的時候,會在記憶體中檢視,是否有它的存在,如果沒有這個資料1的存在,那麼會建立。

如果資料1存在了,那麼直接使用這個資料1的記憶體位址

同時變數b會指向資料1的記憶體位址

總的看來,變數a 與變數b 他們的資料記憶體位址是一致

可變型別不同的地方就是

不論資料是否是首次出現

只要存在資料的使用,都會是乙個建立的過程,都會在記憶體中劃出一塊區域

通過自已的方法,修改資料(增刪改查),自己的記憶體位址,不變

不可變型別不行

變數名 實際的資料

稱呼, 記憶體位址對應的那個資料

同桌,只是乙個標籤

m > id1, 指向的是id1的資料,訪問m,拿到的就是id1的資料

m > id2,指向的是id2的資料,訪問m, 拿到的就id2 的資料

hash(不可變型別)

數字,字串,元組

指的是變數的有效區域

區域性變數

在函式中定義,在函式中使用

函式結束,區域性變數銷亡

全域性變數

在函式外,在主**區定義的變數

全域性變數可以在函式中被使用

特別的情況

如果在函式內定義了乙個與全域性變數同名的變數

如果全域性變數有num = 1

然後我們在函式內也定義了乙個num=3的時候

再列印num 我們就是直接使用自己範圍內的,函式內的num

引入進來後,對它進行賦值操作,就不再是生成區域性變數了

而是修改全域性變數的值

global 全域性變數名  # 引入全域性變數到函式內部

全域性變數名 = 數值 # 修改全域性變數

明確下面的過程到底經歷了哪些步驟

變數1 = 值1

變數2 = 值1

哪些資料型別是可變型別

特點,他們自身有技能(改變自己的技能,增刪改查)

函式的傳參

哪些類據型別是不可變型別

特點,他們自身沒有修改自己的技能

可變型別的特點

不可變型別的特點

雜湊

區域性變數

定義在函式內部的變數

進入函式後才存活,函式結束就銷亡

全域性變數

定義在函式外部的變數

可以被函式使用

區域性變數的命名

以g_ 或者 gl_開頭

寫**的堆放位置

shebang

匯入模組

全域性變數

函式定義

執行的**

變數的高階用法

語法 說明 從變數開頭進行規則匹配,將符合最短的資料刪除 從變數開頭進行規則匹配,將符合最長的資料刪除 從變數尾部進行規則匹配,將符合最短的資料刪除 從變數尾部進行規則匹配,將符合最長的資料刪除 變數內容符合舊字串則,則第乙個舊字串會被新字串取代 變數內容符合舊字串則,則全部的舊字串會被新字串取代 ...

高階 交換變數

這兩天再練習的時候敲了乙個 交換兩個整型變數的值 類似的問題,分析了三種方式,在這裡做一下分享。1.第一種方式就是非常普遍,也是非常大眾化的方式了,建立乙個臨時變數 include 1.交換兩個整型變數的值 int main 這種方式非常常見,也是很多人剛剛學習c語言的時候使用的方法。2.這裡,我考...

shell變數高階

使用readonly命令可以將變數定義為唯讀變數,唯讀變數的值不允許被修改。bin bash var1 1111 echo var1 1111 var1 2222 echo var1 2222 readonly var1 var1 3333 var1 readonly variable echo v...