對於很大的數,例如10000000000
,很難數清楚0的個數。Python允許在數字中間以_
分隔,因此,寫成10_000_000_000
和10000000000
是完全一樣的。十六進制數也可以寫成0xa1b2_c3d4
。
注意:Python的整數沒有大小限制,而某些語言的整數根據其存儲長度是有大小限制的
對於很大或很小的浮點數,必須用科學計數法表示,把10用e
替代,1.23x109
就是1.23e9
,或者12.3e8
,0.000012
可以寫成1.2e-5
,等等。
'
或雙引號"
括起來的任意文本,比如'abc'
,"xyz"
等等。 `可以轉義很多字符,比如
n表示換行,
t表示制表符,字符
`本身也要轉義,所以\
表示的字符就是``。 r''
表示''
內部的字符串默認不轉義。 n
寫在一行裡不好閱讀,為了簡化,Python允許用'''...'''
的格式表示多行內容: print('''line1
line2
line3''')
ord()
函數獲取字符的整數表示,chr()
函數把編碼轉換為對應的字符: >>> ord('A')
65
>>> chr(25991)
'文'
str
包含多少個字符,可以用len()
函數,如果換成bytes
,len()
函數就計算字節數: >>> len('ABC')
3
>>> len('中文')
2
>>> len(b'ABC')
3
>>> len(b'xe4xb8xadxe6x96x87')
6
>>> len('中文'.encode('utf-8'))
6
str
,在內存中以Unicode表示,一個字符對應若干個字節。如果要在網絡上傳輸,或者保存到磁盤上,就需要把str
變為以字節為單位的bytes
。Python對bytes
類型的數據用帶b前綴的單引號或雙引號表示,要注意區分'ABC'
和b'ABC'
,前者是str
,後者雖然內容顯示得和前者一樣,但bytes
的每個字符都只占用一個字節。 # 以Unicode表示的str通過encode()方法可以編碼為指定的bytes
>>> 'ABC'.encode('ascii') # 純英文的str可以用ASCII編碼為bytes,內容是一樣的。
b'ABC'
>>> '中文'.encode('utf-8') # 含有中文的str可以用UTF-8編碼為bytes。在bytes中,無法顯示為ASCII字符的字節,用x##顯示。
b'xe4xb8xadxe6x96x87'
>>> '中文'.encode('ascii') # 含有中文的str無法用ASCII編碼,因為中文編碼的范圍超過了ASCII編碼的范圍,Python會報錯。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
#如果我們從網絡或磁盤上讀取了字節流,那麼讀到的數據就是bytes。要把bytes變為str,就需要用decode()方法:
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'xe4xb8xadxe6x96x87'.decode('utf-8')
'中文'
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注釋是為了告訴Linux/OS X系統,這是一個Python可執行程序,Windows系統會忽略這個注釋;
第二行注釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。
4. 空值
空值是Python裡一個特殊的值,用None
表示。None
不能理解為0
,因為0
是有意義的,而None
是一個特殊的空值。
在Python中,等號=是賦值語句,可以把任意數據類型賦值給變量,同一個變量可以反復賦值,而且可以是不同類型的變量。這種變量本身類型不固定的語言稱之為動態語言,與之對應的是靜態語言。
a = 123 # a是整數
print(a)
a = 'ABC' # a變為字符串
print(a)
# 這種變量本身類型不固定的語言稱之為動態語言,與之對應的是靜態語言。
0
開始的。 -1
做索引,直接獲取最後一個元素,以此類推,可以用-2
、-3
做索引獲取倒數第2個、倒數第3個。 append()
)元素到末尾,也可以把元素插入(insert()
)到指定的位置,比如索引號為1的位置: classmates.append('Adam')
classmates.insert(1, 'Jack')
classmates.pop() # 刪除list末尾的元素
classmates.pop(1) # 刪除指定位置的元素
append()
、insert()
這樣的方法。 因為tuple不可變,所以代碼更安全。如果可能,能用tuple代替list就盡量用tuple。
* tuple的陷阱:當你定義一個tuple時,在定義的時候,tuple的元素就必須被確定下來。但是,要定義一個只有1個元素的tuple,必須加一個逗號`,`,來消除歧義:
t = (1) # 定義的不是tuple,是1這個數
t = (1,) # 定義只包含一個元素的tuple的正確寫法
str是不可變對象,而list是可變對象。
對於可變對象,比如list,對list進行操作,list內部的內容是會變化的,比如:
>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']
而對於不可變對象,比如str,對str進行操作呢:
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'
雖然字符串有個replace()方法,也確實變出了'Abc',但變量a最後仍是'abc',應該怎麼理解呢?
對於不變對象來說,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會創建新的對象並返回,這樣,就保證了不可變對象本身永遠是不可變的。
if
語句的完整形式 if <條件判斷1>:
<執行1>
elif <條件判斷2>:
<執行2>
elif <條件判斷3>:
<執行3>
else:
<執行4>
# 注意不要少寫了冒號:
input()
引發的判斷問題 input()
返回的數據類型是str
,如果想用input()輸入的數據做判斷條件,需要先進行轉換,Python提供了int()
函數將str
轉換為整數,當int()
函數發現一個字符串並不是合法的數字時就會報錯。
for x in ...
循環,依次把list或tuple中的每個元素代入變量x
,然後執行縮進塊的語句。 避免key不存在的錯誤,有兩種辦法:
> * 通過in判斷key是否存在:
>
> ```python
> >>> 'Thomas' in d
> False
> ```
> * 通過dict提供的`get()`方法,如果key不存在,可以返回`None`,或者自己指定的value:
>
> ```python
> >>> d.get('Thomas')
> >>> d.get('Thomas', -1)
> -1
> ```
* 刪除一個key,用`pop(key)`方法,對應的value也會從dict中刪除。
* dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象。在Python中,字符串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key。
2. set
* set和dict類似,也是一組key的集合,唯一區別是set沒有存儲對應的value。
* set可以看成數學意義上的無序和無重復元素的集合,因此,兩個set可以做數學意義上的交集、並集等操作。
* 要創建一個set,需要提供一個list作為輸入集合:
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
add(key)
方法可以添加元素到set中,通過remove(key)
方法可以刪除元素。