要學(xué)習(xí)一門語言,首先要看看它的數(shù)據(jù)類型昔馋。由于Python是一門動態(tài)語言五芝,所以Python的變量在聲明時不需要類型,只要寫出名稱即可刊咳。這里所用的Python版本是目前最新的Python 3.6.1彪见。
數(shù)字類型
整數(shù)
在Python中只有一種整數(shù)類型,類似Java的BigInteger娱挨,可以擴展到無限大位余指。整數(shù)字面量可以是十進制、二進制跷坝、八進制或十六進制的酵镜。數(shù)字在輸出的時候會以十進制輸出,如果希望以其他形式輸出柴钻,可以使用oct淮韭、hex、bin等幾個內(nèi)置函數(shù)轉(zhuǎn)換贴届。
在Python中運算符和其他語言類似靠粪。比較特殊的是除法,默認的/
是小數(shù)除毫蚓,而其他語言中的整除是//
占键。乘方則是**
。下面用一點例子來說明元潘。
print('--------------整數(shù)類型--------------')
print(f'Integer type:{type(100)}')
print(f'Integer value:{100}')
# 各種進制
decimal = 100
binary_number = 0b1100
octal_number = 0o12374
hexadecimal = 0xcafe
print(f'八進制:{oct(decimal)}')
print(f'十六進制:{hex(decimal)}')
print(f'二進制:{bin(decimal)}')
# 特別的運算符
result = 5 / 3
print(f'/ 是小數(shù)除:{result}')
result = 5 // 3
print(f'// 是整除:{result}')
result = 5 ** 3
print(f'**是乘方:{result}')
浮點數(shù)
Python中的浮點數(shù)畔乙,就是遵循IEEE 754的雙精度浮點數(shù)。浮點數(shù)也支持科學(xué)計數(shù)法柬批。這里沒什么說的啸澡。
print('--------------浮點數(shù)類型--------------')
print(f'Float type:{type(3.14)}')
print(f'Float value:{3.14}')
# 各種小數(shù)
float_number = 3.1415
exp_number = 0.31415e1
print(f'float:{exp_number}')
復(fù)數(shù)
Python還有一個特點,那就是內(nèi)置了復(fù)數(shù)的支持氮帐。復(fù)數(shù)字面量使用a+bj
來表示嗅虏。復(fù)數(shù)的實部和虛部分別用real和imag來取得。
print('--------------復(fù)數(shù)類型--------------')
complex1 = 1 + 2j
complex2 = 2 + 3j
print('復(fù)數(shù)類型:', type(complex1))
print('復(fù)數(shù):', complex1 + complex2)
print('復(fù)數(shù){0}的實部:{1}上沐,虛部是:{2}'.format(complex1, complex1.real, complex1.imag))
print('{0}的共軛復(fù)數(shù)是:{1}'.format(complex1, complex1.conjugate()))
布爾類型
Python支持布爾類型皮服,真值和假值分別是True
和False
。
print('--------------布爾類型--------------')
print(f'Bool type:{type(True)}')
print(f'Bool value:{False}')
空類型
Python的空類型類似Java中的void或null。
print('--------------空類型--------------')
print(f'None type:{type(None)}')
print(f'None value:{None}')
字符串
Python字符串可以使用單引號'
或雙引號"
來包括龄广。它們之間沒有任何區(qū)別硫眯。當使用一種引號的時候,字符串內(nèi)部的另一種引號不需要轉(zhuǎn)義择同。所以如果字符串內(nèi)部要包含單引號两入,那么我們使用雙引號包括更好。需要注意敲才,Python字符串是不可變的裹纳。
多行字符串使用三個連續(xù)的引號來表示。為了美觀紧武,多行字符串的第一行往往另起一行剃氧,不過這樣的話第一行實際上會是個空行。如果希望不要第一行的空行阻星,可以在多行字符串上添加一個反斜杠\朋鞍。
如果字符串引號前有一個字母r,說明這個字符串是一個原始(raw)字符串妥箕,其中的\n
這樣的字符不會轉(zhuǎn)義滥酥,而是以字面量形式輸出。
如果字符串引號前有一個字母f畦幢,表示這是一個格式化字符串恨狈。該字符串中的{variable}
將會被實際的變量值所替換。該功能是Python 3.6中新增的呛讲。原始字符串和格式化字符串也可以混用。
下面是一些例子返奉。
print('--------------字符串類型--------------')
print(f'String type:{type("")}')
print(f'string value:{"fuck"}')
multiLineString = '''\
這是一個多行字符串
首行的\\表示第一行被忽略
'''
print(multiLineString)
rawString = r"\n不會被轉(zhuǎn)移"
print(f'原始字符串:{rawString}')
formattedString = f"{3.14}"
print(f'格式化字符串:{formattedString}')
列表
列表也是一種內(nèi)置可變的數(shù)據(jù)結(jié)構(gòu)贝搁,類似Java的List。Python的列表使用也很簡單芽偏。新建列表需要空的一對方括號[]
或者list()
來新建一個空列表雷逆。列表有很多方法可以操作列表中的元素。直接看例子就行了污尉。
print('--------------列表--------------')
# 新建列表
list1 = []
list2 = list()
# 插入元素
list1.append(1)
list1.append(2)
list1.extend(range(3, 6))
list1.insert(2, 9)
print(f'插入元素 list1:{list1}')
# 刪除元素
list1.remove(5)
del list1[2]
print(f'刪除元素 list1:{list1}')
# 清除列表
list1.clear()
print(f'清除列表 list1:{list1}')
# 棧操作
list2.append(1)
list2.append(2)
list2.pop()
print(f'list2:{list2}')
元組
元組和列表類似膀哲,不過需要注意,元組是不可變的被碗。元組的主要作用就是讓函數(shù)方便的返回多個值某宪。創(chuàng)建空元組,可以使用()
或者tuple()
來創(chuàng)建锐朴。需要注意假如元組只有一個元素兴喂,那么需要在后面添加一個逗號。元組的值也可以方便的解構(gòu)出來。
print('--------------元組--------------')
print(f'tuple type:{type((5,))}')
tuple1 = ()
tuple1 = tuple()
tuple2 = (1, 2, 3, 4, 5)
tuple3 = (50,)
tuple2 = (5, 6)
a, b = tuple2
print(f'a={a},b=衣迷')
集合
集合表示不重復(fù)的元素組合畏鼓。要創(chuàng)建集合,只要把元素放到一對花括號中即可壶谒。如果需要空集合云矫,不能使用{}
,而應(yīng)該使用set()
來創(chuàng)建汗菜。如果需要不可變集合让禀,使用frozenset
。集合的簡單使用列在下面了呵俏。
print('--------------集合--------------')
print(f'set type:{type(set())}')
set1 = set()
set2 = {1, 2, 3, 4}
# 添加元素
set1.add(3)
set1.add(4)
set1.add(9)
print(f'set1 :{set1}')
# 刪除元素
set1.remove(4)
# 不可變集合
set1 = frozenset(set1)
# 集合操作
print(f'交:{set1 & set2}')
print(f'并:{set1 | set2}')
print(f'差:{set1 - set2}')
print(f'對稱差集:{set1 ^ set2}')
字典
字典是鍵值對的集合堆缘,類似于Java中的Map類型。需要注意的是Python的字典的鍵必須是不可變類型普碎,也就是說鍵必須是數(shù)字吼肥、元組、字符串這樣的對象才行麻车。由于列表等類型是可變的缀皱,所以它們不能用作鍵。
創(chuàng)建字典使用空花括號對{}
或者dict()
構(gòu)造函數(shù)动猬。字典也包含了各種方法用于對元素進行操作啤斗。值得注意的幾個字典的函數(shù):keys()
返回鍵列表;values()
返回值列表赁咙;items()
返回鍵值對組成的列表歌殃。
print('--------------字典--------------')
print(f'dict type:{type({})}')
# 創(chuàng)建字典
dict1 = {}
dict2 = dict()
dict2 = {1: 2, 2: 4, 3: 6}
# 字典操作
dict1[1] = 1
dict1[2] = 2
print(f'dict1:{dict1}')
dict1[2] = 3
print(f'dict1:{dict1}')
del dict1[2]
print(f'dict1:{dict1}')
# 鍵值集合
print(f'dict2.keys:{dict2.keys()}')
print(f'dict2.values{dict2.values()}')
for k, v in dict2.items():
print(f"[{k}:{v}]", end=' ')
print()
集合操作
序列類型
前面說的列表、元組莫秆、字符串這些都是序列類型幸缕。它們支持功能強大的切片操作。切片操作使用切片操作符[:]
凤覆,會返回對應(yīng)開閉區(qū)間的元素集合链瓦。如果只指定了一邊的索引,那么另外一邊自動擴展到端點處盯桦。
索引還可以是負數(shù)慈俯,表示從后往前數(shù),最后一個元素索引是-1拥峦,倒數(shù)第二個是-2贴膘,以此類推。另外如果索引超出序列范圍也不用擔心略号,解釋器會忽略多余的長度步鉴。
print('--------------序列類型--------------')
longString = 'abcdefghijklnm'
print(f'整個序列:{longString[:]}')
print(f'前5個:{longString[0:5]}')
print(f'后5個:{longString[-6:-1]}')
print(f'前五個之后的所有:{longString[6:]}')
print(f'后五個前面所有的:{longString[:-6]}')
print(f'所有元素:{longString[0:1000]}')
字符串揪胃、元組都是不可變的對象。所以它們的切片只能用來讀取氛琢。如果是列表的話喊递,我們還可以修改切片的值。下面的代碼就將列表的一個切片修改為另一個列表阳似。
longList = [1, 2, 2, 3, 4, 56, 6, 7, 8, 9, 0]
print(f'longList:{longList}')
longList[0:3] = [5]
print(f'longList:{longList}')
列表解析
python的列表還支持一種復(fù)雜的操作骚勘,叫做列表解析。它可以使用一個序列生成另一個列表撮奏,靈活使用的話功能非常強大俏讹。列表解析需要使用for循環(huán)語法。下面是一個將列表轉(zhuǎn)換為平方列表的例子畜吊。
squareList = [i * i for i in range(1, 10)]
它與下面的for循環(huán)等價泽疆,但是寫法更簡潔。
for i in range(1,10):
squareList.append(i*i)
Python官方教程上有幾個更復(fù)雜的例子玲献。例如殉疼,列表解析還可以解析多個變量,以及if表達式捌年。
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
上面的列表解析表達式與下面的等價瓢娜。
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))