Python基礎(chǔ)---變量
什么是變量:
用來綁定數(shù)據(jù)對象的標(biāo)識符
一.變量的命名規(guī)則:
- 變量名必須為字母或下劃線開頭,后跟字母或下劃線或數(shù)字
- 不能使用python的關(guān)鍵字命名
- 命名規(guī)則可以被視為一種?慣例,并無絕對與強(qiáng)制
- 目的是為了 ? 增加代碼的識別和可讀性
- 在定義變量時,為了保證代碼格式,= 的左右應(yīng)該各保留一個空格
- 在Python中,如果變量名需要由?二個?或?多個單詞 組成時,可以按照以下方式命名
- 每個單詞都使用小寫字母
- 單詞與單詞之間使用?_下劃線?連接
- 例如:first_name、ast_name、qq_number、qq_password
- 當(dāng)?變量名是由二個或多個單詞組成時,還可以利用駝峰命名法來命名
- 小駝峰式命名法:第一個單詞以小寫字母開始,后續(xù)單詞的首字母大寫。例如:firstName、lastName
- 大駝峰式命名法:每一個單詞的首字母都采用大寫字母。例如:FirstName、LastName、CamelCase
# 合法的變量命名示例: a a1 b bbb _aaa_ _Abcdvara1b2c2 # 不合法的變量命名示例: 1a 123 $ABC +a -b # ab @ab
關(guān)鍵字:
- 關(guān)鍵字就是在Python內(nèi)部已經(jīng)使用的標(biāo)識符
- 關(guān)鍵字具有特殊的功能和含義
- 開發(fā)者不允許定義和關(guān)鍵字相同的名字的標(biāo)示符
查看關(guān)鍵字:
import keyword print (keyword.kwlist) # ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
二.變量的賦值:
賦值語法:
變量名= 表達(dá)式 變量名1 =變量名2= 表達(dá)式 變量名1,變量名2,... = 序列 變量名1,變量名2,... = 對象1,對象2... 變量名1,變量名2,... = [對象1,對象2...] 變量名1,變量名2,... =(對象1,對象2...)
作用: 用于創(chuàng)建變量并將變量綁定(或關(guān)聯(lián))在一個對象上
說明:
- 當(dāng)變量不存在時,創(chuàng)建該變量同時綁定在這個對象上
- 當(dāng)變量存在時,改變此變量的綁定的對象
- 一個變量只能綁定一個對象
- 兩個變量可以同時綁定一個對象
示例:
a=10 # 創(chuàng)建a變量,和整型對象10綁定在一起 b =20 c =a+b # 創(chuàng)建變量c,和10+20的計算結(jié)果綁定在一起
名詞解釋:
關(guān)聯(lián)/綁定/引用在python中的含義,變量是沒有類型的,關(guān)聯(lián)/綁定/引用都是指變量和一個對象的關(guān)聯(lián)關(guān)系
可以通過help('__main__')來查看當(dāng)前模塊下的數(shù)據(jù)關(guān)聯(lián)關(guān)系
三.python的自動化內(nèi)存管理:
python 的內(nèi)存管理和引用計數(shù)
每個對象都會記錄有幾個變量引用自身,當(dāng)引用的數(shù)量為0時,則對象被銷毀,此種自動化內(nèi)存管理的方式叫引用計數(shù)。
a = 10000 b = 20000 a = a + b # 發(fā)生了什么? c = a # 發(fā)生了什么? # a = 10000 內(nèi)存中創(chuàng)建一個10000對象,用變量a和10000綁定綁定 # b = 20000 內(nèi)存中創(chuàng)建一個 20000對象,用變量b和20000對象綁 # a = a + b 計算對象a 和 b 的和,創(chuàng)建一個30000的對象,a 解除與10000對象的綁定,重新綁定30000這個對象 # c = a 變量c和變量a綁定同一個對象
變量的交換綁定
# 練習(xí):已知有兩個變量:a 綁定 10000 b 綁定 20000 # 問:在不創(chuàng)建任何新的對象的情況下,如何讓a和b 交換綁定的對象? # 方法1: a = 10000 b = 20000 temp = a # 借助第三個變量,經(jīng)典交換算法 a = b b = temp # 方法2:序列賦值 a, b = b , a
四.變量的is與==
- is 比較的是兩個實例對象是不是完全相同,它們是不是同一個對象,占用的內(nèi)存地址是否相同。萊布尼茨說過:“世界上沒有兩片完全相同的葉子”,這個is正是這樣的比較,比較是不是同一片葉子(即比較的id是否相同,這id類似于人的身份證標(biāo)識)。
-
== 比較的是兩個對象的內(nèi)容是否相等,即內(nèi)存地址可以不一樣,內(nèi)容一樣就可以了。這里比較的并非是同一片葉子,可能葉子的種類或者脈絡(luò)相同就可以了。默認(rèn)會調(diào)用對象的?__eq__()方法。
獲取對象的內(nèi)存地址:
id 函數(shù)
格式:
id(對象)
作用:
返回一個對象在內(nèi)存中的地址
可以通過如下例子來區(qū)分比較下:
>>> a = [ " I " , " love " , " Python " ] >>> b = a # a的引用復(fù)制給b,在內(nèi)存中其實是指向了用一個對象 >>> b is a True >>> id(a) 46381384 >>> id(b) 46381384 # 當(dāng)然,內(nèi)容也肯定是相等的 >>> b == a True
可以發(fā)現(xiàn)b和a的內(nèi)存地址是相同的,它們指向同一塊內(nèi)存,因而 is 和 == 的結(jié)果都為True。這是因為直接賦值都是賦值的引用,是引用,是引用,重要的事情說三遍。
但如果不是通過引用賦值,而是通過切片賦值呢?
# b通過切片操作重新分配了對象,但是值和a相同 >>> b = a[:] >>> b is a False >>> id(a) 48740680 >>> id(b) 48740680 >>> b == a # 但他們的值還是相等的 True
新建對象之后,b 和 a 指向了不同的內(nèi)存,所以 b is a 的結(jié)果為False,而 b==a的結(jié)果為True。
在這里,小編提一個問題,b[0] is a[0] 的結(jié)果呢?
答案是True。
因為切片拷貝是淺拷貝,列表中的元素并未重新創(chuàng)建。
通常,我們關(guān)注的是值,而不是內(nèi)存地址,因此 Python 代碼中 == 出現(xiàn)的頻率比 is 高。
但是什么時候用 is 呢?
is 與 == 相比有一個比較大的優(yōu)勢,就是計算速度快,因為它不能重載,不用進(jìn)行特殊的函數(shù)調(diào)用,少了函數(shù)調(diào)用的開銷而直接比較兩個整數(shù) id。而 a == b 則是等同于a.__eq__(b)。繼承自 object 的?__eq__?方法比較兩個對象的id,結(jié)果與 is 一樣。但是多數(shù)Python的對象會覆蓋object的 ? __eq__方法,而定義內(nèi)容的相關(guān)比較,所以比較的是對象屬性的值。
在變量和單例值之間比較時,應(yīng)該使用 is。
目前,最常使用 is 的地方是判斷對象是不是 None。
下面是推薦的寫法:
a
is
None
判斷不是None的推薦寫法是:
a is not None
Python會對比較小的整數(shù)對象進(jìn)行緩存,下次用的時候直接從緩存中獲取,所以is 和 == 的結(jié)果可能相同:
>>> a = 1 >>> b = 1 >>> a is b True >>> a == b True
而看一下另外一段代碼:
>>> a = 257 >>> b = 257 >>> a is b False
原因:
Python僅僅對比較小的整數(shù)對象進(jìn)行緩存(范圍為范圍[-5, 256])緩存起來,而并非是所有整數(shù)對象。需要注意的是,這僅僅是在命令行中執(zhí)行,而在Pycharm或者保存為文件執(zhí)行,結(jié)果是不一樣的,這是因為解釋器做了一部分優(yōu)化。
總結(jié)
- is 比較兩個對象的 id 值是否相等,是否指向同一個內(nèi)存地址;
- == 比較的是兩個對象的內(nèi)容是否相等,值是否相等;
- 小整數(shù)對象[-5,256]在全局解釋器范圍內(nèi)被放入緩存供重復(fù)使用;
- is 運(yùn)算符比 == 效率高,在變量和None進(jìn)行比較時,應(yīng)該使用 is。
五.變量的刪除
del 語句(del 是 delete 的簡寫)
作用:
用于刪除變量,同時刪除與對象的綁定關(guān)系。如果可能則釋放對象
語法:
del 變量名
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
