天天看點

日報變量與值的關系函數傳參的本質資料根據是否變化分兩類不可變類型可變資料類型總結兩類型的指派可變類型的特點問題待解決哈希變量的作用域在函數内修改全局變量小結

變量與值的關系

值,了解為實體的資料

變量,了解為資料的稱呼

每一個值被創造出來,都會有一個記憶體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

函數内部通過global關鍵詞,可以把全局變量引入進來

引入進來後,對它進行指派操作,就不再是生成局部變量了

而是

修改全局變量的值

global 全局變量名  # 引入全局變量到函數内部
全局變量名 = 數值   # 修改全局變量
           

小結

明确下面的過程到底經曆了哪些步驟
變量1 = 值1
變量2 = 值1
           
哪些資料類型是可變類型
  • 清單
  • 字典

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

函數的傳參
  • 本質就是傳送資料的引用
哪些類據類型是不可變類型
  • 數字型
  • 字元串
  • 元組

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

可變類型的特點
  • 被定義時,不論是否有相同的資料,直接在記憶體中劃塊空間存值
  • 可以在不改變記憶體位址的情況下,改變自身内部的資料内容
  • 隻有通過自己的技能(方法)才可以做到不改變記憶體位址改變資料的實作
不可變類型的特點
  • 被定義時,先檢視記憶體中是否有相同的資料存在,如果有就直接使用,如果沒有就劃一塊記憶體存資料
  • 無法在記憶體位址不變的情況下修改資料
哈希
  • 哈希函數 hash(不可變類型)
  • 同樣的資料生成同樣的哈希值
  • 不同的資料生成不同的資料值
  • 指紋的用途,用于識别兩個資料是否一緻
局部變量

定義在函數内部的變量

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

全局變量

定義在函數外部的變量

可以被函數使用

函數内部要修改全局變量,可通過global關鍵詞先導入進來,然後通過指派語句來修改

局部變量的命名

以g_ 或者 gl_開頭

寫代碼的堆放位置

shebang

導入子產品

全局變量

函數定義

執行的代碼