3.22 爬虫小记
今天刷視頻的時候發現有些語法細節忘記了,隨手一記:
在文本編輯器中,需要設置把Tab自動轉換為4個空格,確保不混用Tab和空格。
整數運算永遠是精確的(除法難道也是精確的?是的!),而浮點數運算則可能會有四舍五入的誤差。
如果字符串里面有很多字符都需要轉義,就需要加很多\,為了簡化,Python還允許用r''表示''內部的字符串默認不轉義,
print('\\t\') \ \
print(r'\\t\') \\t\
上面是在交互式命令行內輸入,注意在輸入多行內容時,提示符由>>>變為...,提示你可以接著上一行輸入,注意...是提示符,不是代碼的一部分
│>>> print('''line1
... line2
... line3''')
line1
line2
line3
│>>> _
Python的整數沒有大小限制,Python的浮點數也沒有大小限制,但是超出一定范圍就直接表示為inf(無限大)。
默認情況下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同時迭代key和value,可以用for k, v in d.items()。
由于字符串也是可迭代對象,因此,也可以作用于for循環:
因為dict的存儲不是按照list的方式順序排列,所以,迭代出的結果順序很可能不一樣。
默認情況下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同時迭代key和value,可以用for k, v in d.items()。
由于字符串也是可迭代對象,因此,也可以作用于for循環:
for ch in 'ABC': ... print(ch) ... A B C
所以,當我們使用for循環時,只要作用于一個可迭代對象,for循環就可以正常運行,而我們不太關心該對象究竟是list還是其他數據類型。
通過collections模塊的Iterable類型判斷一個對象是可迭代對象:
from collections import Iterable isinstance('abc', Iterable) # str是否可迭代 True
isinstance([1,2,3], Iterable) # list是否可迭代 True
isinstance(123, Iterable) # 整數是否可迭代 False
Python內置的enumerate函數可以把一個list變成索引-元素對,這樣就可以在for循環中同時迭代索引和元素本身:
for i, value in enumerate(['A', 'B', 'C']): ... print(i, value) ... 0 A 1 B 2 C 上面的for循環里,同時引用了兩個變量,在Python里是很常見的:
for x, y in [(1, 1), (2, 4), (3, 9)]: ... print(x, y) ... 1 1 2 4 3 9
但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循環:
L = [] for x in range(1, 11): ... L.append(x * x) ...
L [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但是循環太繁瑣,而列表生成式則可以用一行語句代替循環生成上面的list:
[x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
寫列表生成式時,把要生成的元素x * x放到前面,后面跟for循環,就可以把list創建出來 for循環后面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方:
[x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] 還可以使用兩層循環,可以生成全排列:
[m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ'] 三層和三層以上的循環就很少用到了。
for循環其實可以同時使用兩個甚至多個變量,比如dict的items()可以同時迭代key和value:
d = {'x': 'A', 'y': 'B', 'z': 'C' } for k, v in d.items(): ... print(k, '=', v) ... y = B x = A z = C
format
print('{0},{1}'.format('zhangk', 32))# print('{i}'.format(for i in range(6))) print('{},{},{}'.format('zhangk', 'boy', 32))print('{name},{sex},{age}'.format(age=32, sex='male', name='zhangk'))# 格式限定符 # 它有著豐富的的“格式限定符”(語法是{}中帶:號),比如:# 填充與對齊 # 填充常跟對齊一起使用 # ^、<、>分別是居中、左對齊、右對齊,后面帶寬度 # :號后面帶填充的字符,只能是一個字符,不指定的話默認是用空格填充print('{:>8}'.format('zhang')) print('{:0>8}'.format('zhang')) print('{:a<8}'.format('zhang')) print('{:p^10}'.format('zhang'))# 精度與類型f # 精度常跟類型f一起使用 print('{:.2f}'.format(31.31412))# 其他類型 # 主要就是進制了,b、d、o、x分別是二進制、十進制、八進制、十六進制 print('{:b}'.format(15))print('{:d}'.format(15))print('{:o}'.format(15))print('{:x}'.format(15))# 用逗號還能用來做金額的千位分隔符 print('{:,}'.format(123456789)) 復制代碼字典
學習到的新用法
data = {'id': '20120001','name': 'Bob','age': 20 }# print(data.clear()) print(data.items()) print(data.values()) print(tuple(data.values())) 復制代碼輸出:
dict_items([('id', '20120001'), ('name', 'Bob'), ('age', 20)])
dict_values(['20120001', 'Bob', 20])
('20120001', 'Bob', 20)
總結
- 上一篇: ipvsadm使用和命令
- 下一篇: 说说 Spring 事务管理的实现类