變量
變量的定義
-
基本語(yǔ)法:
變量名 = 值
-
變量名是給對(duì)象貼一個(gè)用于訪問的標(biāo)簽,給對(duì)象綁定名字的過(guò)程也稱為賦值,賦值符號(hào) “=”
變量名自定義,要滿足標(biāo)識(shí)符命名規(guī)則。
-
Python中,不需要事先聲明變量名及其類型,直接賦值即可創(chuàng)建各種類型的對(duì)象變量。
變量在第一次賦值時(shí)被創(chuàng)建,再次出現(xiàn)時(shí)可直接使用。
-
Python 屬于 強(qiáng)類型編程語(yǔ)言
雖然不需要在使用之前顯式的聲明變量及其類型,但 Python 是一種不折不扣的強(qiáng)類型語(yǔ)言,Python 解釋器會(huì)根據(jù)賦值運(yùn)算符右側(cè)表達(dá)式的來(lái)自動(dòng)推斷變量類型,在變量被創(chuàng)建后,除非顯式修改變量類型或刪除變量,否則變量將一直保持之前的類型。
-
Python 是一種動(dòng)態(tài)類型語(yǔ)言,變量的類型是可以 隨時(shí)變化的。
-
Python 采用的是 基于值的內(nèi)存管理方式 ,如果為不同變量賦值為相同值,這個(gè)值在內(nèi)存中只有一份,多個(gè)變量指向同一塊內(nèi)存地址。
賦值語(yǔ)句的執(zhí)行過(guò)程是:首先把等號(hào)右側(cè)表達(dá)式的值計(jì)算出來(lái),然后在內(nèi)存中尋找一個(gè)位置把值存放進(jìn)去,最后創(chuàng)建變量并指向這個(gè)內(nèi)存地址。
Python 中的變量并不直接存儲(chǔ),而是存儲(chǔ)了值的內(nèi)存地址或者引用。這也是變量類型隨時(shí)可以改變的原因。
-
Python 具有自動(dòng)內(nèi)存管理功能,對(duì)于沒有任何變量指向的值,Python 自動(dòng)將其刪除。
Python 會(huì)跟蹤所有的值,并自動(dòng)刪除不再有變量指向的值。因此,Python 程序員一般情況下不需要太多考慮內(nèi)存管理的問題。
不過(guò)顯式使用 del 命令刪除不需要的值或顯式關(guān)閉不再需要訪問的資源,仍是一個(gè)好的習(xí)慣,同時(shí)也是一個(gè)優(yōu)秀程序員的基本素養(yǎng)之一。
-
Python 字符串駐留機(jī)制:
-
字符串長(zhǎng)度為 0 或 1 時(shí),默認(rèn)采用駐留機(jī)制;
-
字符串長(zhǎng)度大于 1 時(shí),且 字符串中只包含大小寫字母、數(shù)字、下劃線( _ )時(shí),采用駐留機(jī)制;
-
對(duì)于 [-5,256]之間的整數(shù)數(shù)字,Python默認(rèn)駐留 ;
-
字符串 只在編譯時(shí)進(jìn)行駐留,而非運(yùn)行時(shí) 。Python 是解釋型語(yǔ)言,但是事實(shí)上,它的解釋器也可以是理解為是一種編譯器,它負(fù)責(zé)將 Python 代碼翻譯成字節(jié)碼,也就是 .pyc 文件;
-
用乘法得到的字符串
- 如果結(jié)果長(zhǎng)度 <=20 且字符串只包含數(shù)字、字母大小寫、下劃線,支持駐留。
- 長(zhǎng)度 >20,不支持駐留。
這樣的設(shè)計(jì)目的是為了保護(hù) .pcy 文件不會(huì)被錯(cuò)誤代碼搞的過(guò)大。
-
變量(標(biāo)識(shí)符)命名規(guī)則
-
變量名的首字符必須是下劃線、英文字母或其他 Unicode 字符,變量名可包含下劃線、英文字母、數(shù)字或其他 Unicode 字符。
例如,_abc、r_1 是合法的變量名,而 2abc、price$ 則不合法。
注:
- 不能數(shù)字開頭
- 以下劃線開頭的變量在 Python 中有特殊含義,普通變量一般不使用下劃線開頭,并不是不能用下劃線開頭
-
變量名中不能有空格或標(biāo)點(diǎn)符號(hào)(括號(hào)、引號(hào)、逗號(hào)、斜線、反斜線、冒號(hào)、句號(hào)、問號(hào)等)
-
變量名嚴(yán)格區(qū)分大小寫。例如,Abc 和 abc 是兩個(gè)不同的變量
-
不能使用 Python 保留字或關(guān)鍵字作變量名
注:
- 保留字或關(guān)鍵字可以是變量名的一部分
- 保留字和關(guān)鍵字在 Python 中具有特殊意義,將保留字或關(guān)鍵字作為變量名會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤
- 可以導(dǎo)入 keyword 模塊后使用
print(keyword.kwlist)
函數(shù)查看所有 Python 關(guān)鍵字
-
不建議使用系統(tǒng)內(nèi)置的模塊名、類型名或函數(shù)名以及已導(dǎo)入的模塊名及其成員名作變量名,這將會(huì)改變其類型和含義,可以通過(guò)
dir(builtins)
函數(shù)查看所有內(nèi)置模塊、類型和函數(shù) -
變量的命名習(xí)慣:
- 大駝峰:即每個(gè)單詞首字母都大寫,例如: MyName
- 小駝峰:第二個(gè)(含)以后的單詞首字母大寫,例如: myName
- 下劃線:例如: my_name
-
除了命名規(guī)則外,Python 還有一些變量使用慣例:
-
以一個(gè)下劃線開頭的變量約定用于指定模塊的私有變量或私有函數(shù)(private)
在模塊外或類外不可用使用,不能用導(dǎo)入模塊所有變量(
from module import *
)形式導(dǎo)入,但可以使用單獨(dú)導(dǎo)入模塊變量(from module import _變量名
)形式導(dǎo)入from Person import _abc
-
以兩個(gè)下劃線開頭的變量約定是類的私有變量(注意:不能同時(shí)以兩個(gè)下劃線結(jié)尾)
-
在 class 類的內(nèi)部,帶雙下劃線的類變量、實(shí)例變量、方法具有正常訪問權(quán)限
-
在繼承結(jié)構(gòu)中,帶雙下劃線的基類的類變量和實(shí)例變量不能被子類直接訪問。
-
在實(shí)例中,帶雙下劃線的類變量、實(shí)例變量、方法不能被直接訪問。
但有辦法間接訪問:
對(duì)象名._className__func
class Student: __grade = 0 stu = Student() print(stu._Student__grade)
-
-
首尾各有一個(gè)下劃線的變量名通常為系統(tǒng)變量。例如,
_name_
、_doc_
-
首尾各有兩個(gè)下劃線的變量名是系統(tǒng)定義名字,這些方法會(huì)在特定的條件下被觸發(fā)執(zhí)行,也可手動(dòng)調(diào)用
每個(gè) Python 腳本在運(yùn)行時(shí)都有一個(gè)
__name__
屬性。- 如果腳本作為模塊被導(dǎo)入,則其
__name__
屬性的值被自動(dòng)設(shè)置為模塊名(.py 文件的名稱) - 如果腳本獨(dú)立運(yùn)行,則其
__name__
屬性值被自動(dòng)設(shè)置為__main__
利用
__name__
屬性即可控制 Python 程序的運(yùn)行方式。例如,編寫一個(gè)包含大量可被其他程序利用的函數(shù)的模塊,而不希望該模塊可以直接運(yùn)行,則可以在程序文件中添加以下代碼:if __name__ == '__main__': print('Please use me as a module.')
這樣一來(lái),程序直接執(zhí)行時(shí)將會(huì)得到提示“Please use me as a module.”,而使用 import 語(yǔ)句將其作為模塊導(dǎo)入后可以使用其中的類、方法、常量或其他成員。
- 如果腳本作為模塊被導(dǎo)入,則其
-
賦值語(yǔ)句
賦值語(yǔ)句用于將數(shù)據(jù)賦值給變量。
Python 支持多種格式的賦值語(yǔ)句:簡(jiǎn)單賦值、序列賦值、多目標(biāo)賦值和增強(qiáng)賦值等:
-
簡(jiǎn)單賦值:用于為一個(gè)變量賦值(詳見 賦值運(yùn)算符)
-
序列賦值:可以一次性為多個(gè)變量賦值(詳見 賦值運(yùn)算符)
在序列賦值語(yǔ)句中,等號(hào)左側(cè)是元組或列表表示的多個(gè)變量,等號(hào)右側(cè)是元組、列表或字符串等序列表示的數(shù)據(jù)。Python 按先后順序依次將數(shù)據(jù)賦值給變量。
-
多目標(biāo)賦值:指用連續(xù)的多個(gè)等號(hào)將同一個(gè)數(shù)據(jù)賦值給多個(gè)變量(詳見 賦值運(yùn)算符)
-
增強(qiáng)賦值:指將運(yùn)算符與賦值相結(jié)合的賦值語(yǔ)句(詳見 復(fù)合賦值運(yùn)算符)
示例代碼:
a = 5 a += 10 print(a) # 輸出:15
數(shù)據(jù)類型
Python 的六大數(shù)據(jù)類型如下所示:
-
數(shù)字(Numbers):int(整型),long(長(zhǎng)整型),complex(復(fù)數(shù)),float(浮點(diǎn)型),bool(布爾型);
-
整數(shù)型:
- 十進(jìn)制整數(shù):如,0、-1、9、123
- 十六進(jìn)制整數(shù):需要 16 個(gè)數(shù)字 0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f 來(lái)表示整數(shù),必須以 0x 開頭,如 0x10、0xfa、0xabcdef
- 八進(jìn)制整數(shù):只需要 8 個(gè)數(shù)字 0、1、2、3、4、5、6、7 來(lái)表示整數(shù),必須以 0o 開頭,如 0o35、0o11
- 二進(jìn)制整數(shù):只需要 2 個(gè)數(shù)字 0、1 來(lái)表示整數(shù),必須以 0b 開頭,如,0b101、0b100
-
浮點(diǎn)數(shù):
- 小數(shù)點(diǎn)形式:0.0,-1.34,-99.
- 科學(xué)計(jì)數(shù)法:23e4,78e-4,3.5E7
-
復(fù)數(shù):
復(fù)數(shù)由實(shí)數(shù)部分和虛數(shù)部分構(gòu)成,Python 語(yǔ)言中通常使用 a+bj 或者 complex(a,b) 表示,其中 a 表示復(fù)數(shù)的實(shí)部,b 表示復(fù)數(shù)的虛部,并且復(fù)數(shù)的實(shí)部 a 和虛部 b 都是浮點(diǎn)型。
-
-
字符串(String):“Python”,‘Python’
-
列表(List):[1, 2, 3, 4],[5,6,7, [8,9], 10]
-
字典(Dictionary,縮寫 dict):{1: “study”, 2: “Python”}
-
元組(Tuple):(1, “shuai”, 2)
-
集合(Set):{‘P’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’}
注:
- 除數(shù)字類型外其他類型,均可以通過(guò) 變量名[索引] 形式獲取 索引 對(duì)應(yīng)的值
數(shù)據(jù)類型轉(zhuǎn)換
參考:python之?dāng)?shù)據(jù)類型轉(zhuǎn)換
隱式類型轉(zhuǎn)換
隱式類型轉(zhuǎn)換 - 自動(dòng)完成
對(duì)兩種不同類型的數(shù)據(jù)進(jìn)行運(yùn)算,較低數(shù)據(jù)類型(整數(shù))就會(huì)轉(zhuǎn)換為較高數(shù)據(jù)類型(浮點(diǎn)數(shù))以避免數(shù)據(jù)丟失
num_int = 123
num_flo = 1.23
num_new = num_int + num_flo
print("Value of num_new:", num_new)
print("datatype of num_int:", type(num_int))
print("datatype of num_flo:", type(num_flo))
print("datatype of num_new:", type(num_new))
顯式類型轉(zhuǎn)換
顯式類型轉(zhuǎn)換 - 需要使用類型函數(shù)來(lái)轉(zhuǎn)換
整型和字符串類型運(yùn)算結(jié)果會(huì)報(bào)錯(cuò),輸出 TypeError。 Python 在這種情況下無(wú)法使用隱式轉(zhuǎn)換,可以使用 int()、float()、str() 等預(yù)定義函數(shù)來(lái)執(zhí)行顯式類型轉(zhuǎn)換。
數(shù)據(jù)類型之間的轉(zhuǎn)換內(nèi)置函數(shù):
-
int(x [,base]) :將 x 轉(zhuǎn)換為一個(gè)整數(shù)
# 語(yǔ)法: class int(x, base=10) # base為進(jìn)制數(shù),默認(rèn)十進(jìn)制,若 x 不符合 base 規(guī)則,則報(bào)錯(cuò) # 實(shí)例: print(int(3.6)) print(int("1001", 2)) print(int("0xa", 16))
注意:浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)是向下取整,不是四舍五入
-
float(x) :用于將整數(shù)和字符串轉(zhuǎn)換成浮點(diǎn)數(shù)
# 語(yǔ)法: float([x]) # x -- 整數(shù)或字符串 # 實(shí)例: str1 = "3.14" str2 = 2 f1 = float(str1) f2 = float(str2) print(f1, f2)
-
bool(x) :將參數(shù)轉(zhuǎn)換為布爾值
參數(shù)是“0”或省略,返回 False,否則,返回 True
# 實(shí)例: print(bool()) print(bool(0)) print(bool(1)) print(bool(1.2)) print(bool(-1)) print(bool(-1.1)) print(bool("a"))
-
str(x) :將對(duì)象轉(zhuǎn)化為適于人閱讀的形式,返回一個(gè)對(duì)象的 string 格式
# 語(yǔ)法: str(object='') # # 實(shí)例: s1 = 'python' s2 = {'python': 'python.com', 'google': 'google.com'} print(str(s1), str(s2))
-
repr(x) :將對(duì)象轉(zhuǎn)化為供解釋器讀取的形式,返回一個(gè)對(duì)象的 string 格式
# 語(yǔ)法: repr(object) # 實(shí)例: s1 = 'python' s2 = {'python': 'python.com', 'google': 'google.com'} print(repr(s1), repr(s2))
-
eval(str) :用來(lái)執(zhí)行一個(gè)字符串表達(dá)式,并返回表達(dá)式的值
# 語(yǔ)法: eval(expression[, globals[, locals]]) # expression -- 表達(dá)式 # globals -- 變量作用域,全局命名空間,如果被提供,則必須是一個(gè)字典對(duì)象 # locals -- 變量作用域,局部命名空間,如果被提供,可以是任何映射對(duì)象。 # 實(shí)例: x,y = 1,2 e1 = eval('3 * x') e2 = eval('pow(2,3)') e3 = eval('y+10') print(e1, e2, e3)
-
tuple(s) :將可迭代系列(字符串,列表,字典,集合)轉(zhuǎn)換為元組
# 語(yǔ)法: tuple(iterable) # 實(shí)例: l1 = ['python', 'ruby', 'golang', 'java'] t1 = tuple(l1) print(t1)
-
list(s) :將元組或字符串轉(zhuǎn)換為列表
元組與列表是非常類似的,區(qū)別在于元組的元素值不能修改,元組是放在括號(hào)中,列表是放于方括號(hào)中
# 語(yǔ)法: list( seq ) # seq -- 要轉(zhuǎn)換為列表的元組或字符串 # 實(shí)例: t1 = (123, 'Google', 'Python', 'Taobao') l1 = list(t1) s1 = "hello" l2 = list(s1) print(l1, l2)
-
set(s) :創(chuàng)建一個(gè)無(wú)序不重復(fù)元素集,可進(jìn)行關(guān)系測(cè)試,刪除重復(fù)數(shù)據(jù)(返回新的集合對(duì)象)
# 語(yǔ)法: set([iterable]), # 實(shí)例: l1 = ['a', 'b', 'b', 'c', 'c', 'c'] s1 = set(l1) print(s1)
-
dict(d) :創(chuàng)建一個(gè)字典
d 必須是一個(gè) (key, value) 元組序列
# 語(yǔ)法: dict(**kwarg) dict(mapping, **kwarg) dict(iterable, **kwarg), # **kwargs -- 關(guān)鍵字 # mapping -- 元素的容器,映射類型(Mapping Types)是一種關(guān)聯(lián)式的容器類型,它存儲(chǔ)了對(duì)象與對(duì)象之間的映射關(guān)系 # iterable -- 可迭代對(duì)象 # 實(shí)例: # 傳入關(guān)鍵字 d1 = dict(a='a', b='b', t='t') # 映射函數(shù)方式來(lái)構(gòu)造字典 d2 = dict(zip(['one', 'two', 'three'], [1, 2, 3])) # # 可迭代對(duì)象方式來(lái)構(gòu)造字典 d3 = dict([('one', 1), ('two', 2), ('three', 3)]) print(d1) print(d2) print(d3)
-
complex(real [,imag]) :創(chuàng)建一個(gè)值為 real + imag * j 的復(fù)數(shù)或者轉(zhuǎn)化一個(gè)字符串或數(shù)為復(fù)數(shù)
如果第一個(gè)參數(shù)為字符串,則不需要指定第二個(gè)參數(shù)。。
# 語(yǔ)法: complex([real[, imag]]) # real -- int, long, float或字符串 # imag -- int, long, float # 實(shí)例: c1 = complex(1, 2) c2 = complex(3) print(c1,c2)
-
frozenset(s) :返回一個(gè)凍結(jié)的集合,凍結(jié)后集合不能再添加或刪除任何元素
返回新的 frozenset 對(duì)象,如果不提供任何參數(shù),默認(rèn)會(huì)生成空集合。
# 語(yǔ)法: frozenset([iterable]) # iterable -- 可迭代的對(duì)象,比如列表、字典、元組等等。 # 實(shí)例: f1 = frozenset(range(10)) f2 = frozenset(['h','e','l','l','0']) print(f1) print(f2)
-
chr(x) :用一個(gè)范圍在 range(256)內(nèi)的(就是0~255)整數(shù)作參數(shù),返回值是當(dāng)前整數(shù)對(duì)應(yīng)的 ASCII 字符。
# 語(yǔ)法: chr(i) # i -- 可以是10進(jìn)制也可以是16進(jìn)制的形式的數(shù)字 # 實(shí)例: print(chr(0x30), chr(0x31), chr(0x61)) # 十六進(jìn)制 print(chr(48), chr(49), chr(97)) # 十進(jìn)制
-
ord(x) : chr() 函數(shù)(對(duì)于8位的 ASCII 字符串)或 unichr() 函數(shù)(對(duì)于Unicode對(duì)象)的配對(duì)函數(shù)
它以一個(gè)字符(長(zhǎng)度為1的字符串)作為參數(shù),返回對(duì)應(yīng)的 十進(jìn)制 ASCII 數(shù)值,或者 Unicode 數(shù)值
如果所給的 Unicode 字符超出了 Python 定義范圍,則會(huì)引發(fā)一個(gè) TypeError 的異常
# 語(yǔ)法: ord(c) # c -- 字符 # 實(shí)例: o1 = ord('a') o2 = ord('b') o3 = ord('c') print(o1,o2,o3)
-
hex(x) :用于將 10 進(jìn)制整數(shù)轉(zhuǎn)換成 16 進(jìn)制,以字符串形式表示。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-728110.html
# 語(yǔ)法:hex(x) # 實(shí)例: print(hex(255), hex(-42), hex(1), hex(12), type(hex(12)))
-
oct(x) :將一個(gè)整數(shù)轉(zhuǎn)換成 8 進(jìn)制字符串。Python3.x 版本的 8 進(jìn)制以 0o 作為前綴表示文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-728110.html
# 語(yǔ)法:oct(x) # x -- 整數(shù) # 實(shí)例: o1 = oct(10) o2 = oct(20) o3 = oct(15) print(o1, o2, o3)
到了這里,關(guān)于Python 變量的定義和數(shù)據(jù)類型的轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!