深刻Python3學習備忘記錄

Python 中有許多內置數據類型。如下是比較重要的一些:
  1. Booleans【布爾型】 或爲 True[真] 或爲 False[假]。
  2. Numbers【數值型】 能夠是 Integers【整數】(1 和 2)、Floats【浮點數】(1.1 和 1.2)、Fractions【分數】(1/2 和 2/3);甚至是 Complex Number【複數】
  3. Strings【字符串型】 是 Unicode 字符序列,例如: 一份 html 文檔。
  4. Bytes【字節】 和 Byte Arrays【字節數組】, 例如: 一份 jpeg 圖像文件。
  5. Lists【列表】 是值的有序序列。
  6. Tuples【元組】 是有序而不可變的值序列。
  7. Sets【集合】 是裝滿無序值的包裹。
  8. Dictionaries【字典】 是鍵值對的無序包裹。

>>> math.tan(math.pi / 4) 0.9999999999999999 >>> 0.999999999999999 == math.tan(math.pi/4) False
元組可轉換成列表,反之亦然。內建的 tuple() 函數接受一個列表參數,並返回一個包含一樣元素的元組,而 list() 函數接受一個元組參數並返回一個列表。從效果上看,  tuple()  凍結列表,而  list()  融化元組
>>> type((False))
<class 'bool'>
>>> type((False,))
<class 'tuple'>
爲建立單元素元組,必須在值以後加上一個逗號。 沒有逗號,Python 會假定這只是一對額外的圓括號,雖然沒有害處,但並不建立元組。 


常見的集合操做html

>>> aset = {1,3,5,7,9}
>>> bset = {2,3,5,7}
>>> aset.union(bset)
{1, 2, 3, 5, 7, 9}
>>> aset.intersection(bset)
{3, 5, 7}
>>> aset.difference(bset)
{9, 1}
>>> aset.symmetric_difference(bset)
{1, 2, 9}
請記住: 集合是無序的。任何兩個包含全部一樣值(無一遺漏)的集合可認爲是相等的。
>>>a_set = {1, 2, 3} 
>>>b_set = {1, 2, 3, 4} 
>>>a_set.issubset(b_set) 
True 
>>>b_set.issuperset(a_set)
True


交換字典的鍵和值
python

>>>a_dict = {'a': 1, 'b': 2, 'c': 3} 
>>>{value:key for key, value in a_dict.items()} 
{1: 'a', 2: 'b', 3: 'c'}


(format)替換域
正則表達式

>>>username = 'mark' 
>>>password = 'PapayaWhip' 
>>>"{0}'s password is {1}".format(username, password) 
"mark's password is PapayaWhip"

>>> import humansize, sys
>>> '1MB = 1000{0.modules[humansize].SUFFIXES[1000][0]}'.format(sys)
'1MB = 1000KB'
注意:在使用替換域的時候,咱們在省略了字典的鍵名周圍的引號(好比 humansize)

從技術上說,字符編碼的重載聲明也能夠放在第二行,若是第一行被類unix系統中的hash-bang命令佔用了: windows

#!/usr/bin/python3
# -*- coding: windows-1252 -*-


斐波那奇生成器
數組

def fib(max): a, b = 0, 1 while a < max: yield a a, b = b, a + b 
>>> from fibonacci import fib
>>> for n in fib(1000):      
...     print(n, end=' ')    
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> list(fib(1000))          
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]

正則的一個補充:
函數

>>> re.findall(' s.*? s', "The sixth sick sheikh's sixth sheep's sick.") [' sixth s', " sheikh's s", " sheep's s"] 
很驚奇?這個正則表達式尋找一個空格,一個 s, 而後是最短的任何字符構成的序列(.*?), 而後是一個空格, 而後是另外一個s。 在輸入字符串中,我看見了五個匹配:
    The sixth sick sheikh's sixth sheep's sick.
    The sixth sick sheikh's sixth sheep's sick.
    The sixth sick sheikh's sixth sheep's sick.
    The sixth sick sheikh's sixth sheep's sick.
    The sixth sick sheikh's sixth sheep's sick. 可是re.findall()函數值只返回了3個匹配。準確的說,它返回了第一,第三和第五個。爲何呢?由於它不會返回重疊的匹配。第一個匹配和第二個匹配是重疊的,因此第一個被返回了,第二個被跳過了。而後第三個和第四個重疊,因此第三個被返回了,第四個被跳過了。最後,第五個被返回了。三個匹配,不是五個。 這和字母算術解決者沒有任何關係;我只是以爲這頗有趣。
相關文章
相關標籤/搜索