對於很大的數,例如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'))
6str,在內存中以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)方法可以刪除元素。