此博客僅爲我業餘記錄文章所用,發佈到此,僅供網友閱讀參考,如有侵權,請通知我,我會刪掉。
本文章純野生,無任何借鑑他人文章及抄襲等。堅持原創!!
前言
你好。這裏是Python爬蟲從入門到放棄系列文章。我是SunriseCai。
本文章主要介紹一下Python爬蟲過程中可能會常用到的Python高級語法。
Python高級函數
lambda表達式,Python中一類特殊的定義函數的形式,使用它可以定義一個匿名函數。
-
語法:lambda argument_list: expression(argument_list爲傳入的參數,expression爲表達式,這一整個叫做lambda函數)
-
基本示例:
lambda_eg = lambda x,y : x*y # 輸出傳入的兩個值的乘積
print(lambda_eg (2, 3)) # 6
lambda有多種用法,這裏只對經常用到的用法做介紹。
方法 | 描述 |
---|---|
sorted() | sorted() 函數對所有可迭代的對象進行排序操作。 |
filter() | 用於過濾序列,過濾掉不符合條件的元素,返回迭代器 |
map() | 參數序列中的每一個元素都調用函數,返回迭代器 |
zip() | 用於將可迭代的對象作爲參數,將對應元素打包成多個元組 |
- sorted():
list_eg = [70, 45, 37, 127, 148, 26, 121]
sorted_eg = sorted(list_eg, key=lambda x: x) # 這裏不加lambda函數也是返回一樣的結果
print(sorted_eg) # [26, 37, 45, 70, 121, 127, 148]
# sorted_eg = sorted(list_eg, key=lambda x: x,reverse=True) # 添加reverse=True,爲倒序輸出
# print(sorted_eg)[148, 127, 121, 70, 45, 37, 26]
- filter():
list_eg = [70, 45, 37, 127, 148, 26, 121]
is_even = filter(lambda x: x % 2 == 0, list_eg) # 判斷爲偶數就輸出
print(list(is_even )) # [70, 148, 26] 因爲輸出的是迭代器,所以轉換爲list再輸出
- map():
list_eg = [70, 45, 37, 127, 148, 26, 121]
square = map(lambda x: x ** 2, list_eg) # 輸出平方
print(list(square))
- zip():
values = [70, 45, 37, 127, 148, 26, 121]
dogs = ['哈士奇', '薩摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基']
dict_dogs = zip(dogs, values) # 遍歷兩組元素,返回元組
print(dict(dict_dogs)) # 轉換成字典再輸出
# {'哈士奇': 70, '薩摩耶': 45, '泰迪': 37, '金毛': 127, '牧羊犬': 148, '吉娃娃': 26, '柯基': 121}
Python推導式
推導式提供了從一個數據序列創建其它的數據結構的簡單途徑。換句話說就是可以減少代碼量。共三種推導式,分別是列表推導式、字典推導式以及集合推導式。下來看看看他們的使用方法。
- Python列表推導式(list)
- 以建立一個10以內可以整除2的列表爲例:
常規寫法:
values = [70, 45, 37, 127, 148, 26, 121]
list_even = []
for i in values:
if i % 2 == 0:
list_even.append(i)
print(list_even) # [70, 148, 26]
列表推導式:
values = [70, 45, 37, 127, 148, 26, 121]
list_even = list(i for i in values if i % 2 == 0)
print(list_even) # [70, 148, 26]
- Python字典推導式(dict)
- 以兩個列表做鍵值對,建立成一個字典爲例。
常規寫法:
dogs = ['哈士奇', '薩摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基']
values = [70, 45, 37, 127, 148, 26, 121]
dict_dogs = {}
for k, v in zip(values, dogs):
dict_dogs[k] = v
print(dict_dogs)
# {'哈士奇': 70, '薩摩耶': 45, '泰迪': 37, '金毛': 127, '牧羊犬': 148, '吉娃娃': 26, '柯基': 121}
字典推導式:
dogs = ['哈士奇', '薩摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基']
values = [70, 45, 37, 127, 148, 26, 121]
dict_dogs = {i[0]: i[1] for i in zip(dogs, values)}
print(dict_dogs)
# {'哈士奇': 70, '薩摩耶': 45, '泰迪': 37, '金毛': 127, '牧羊犬': 148, '吉娃娃': 26, '柯基': 121}
- Python集合推導式(set)
- 以將一個列表內的值求平方,輸入到集合中再輸出
常規寫法:
values = [70, 45, 37, 127, 148, 26, 121]
square = []
for i in values:
square.append(i ** 2) # 求平方且存入到新列表
set_square = set(square) # 列表轉換爲集合
print(set_square) # {16129, 4900, 676, 2025, 21904, 14641, 1369}
集合推導式:
values = [70, 45, 37, 127, 148, 26, 121]
set_square = {i ** 2 for i in values}
print(set_square) # {16129, 4900, 676, 2025, 21904, 14641, 1369}
通過上面的推導式例子,是不是已經覺得推導式可以減少很多代碼量了呢!!
其他常用
這裏示例幾個例子。分別是
方法1 | 方法2 |
---|---|
字典根據 值 排序 | 字典根據 鍵 排序 |
… | … |
- 字典(dict)排序,根據鍵排序 值排序
- 注意一下:如果字典(dict)的鍵值是字符而不是整數,這時使用int(str)轉換爲整數即可。
字典根據 鍵 排序:
dict_dogs = {31: '哈士奇', 20: '薩摩耶', 3: '泰迪', 24: '金毛'}
dict_order_dogs = dict(sorted(dict_dogs.items(), key=lambda x: x[0])) # 正序
dict_order_dogs = dict(sorted(dict_dogs.items(), key=lambda x: x[0], reverse=True)) # 倒序
print(dict_order_dogs) # {3: '泰迪', 20: '薩摩耶', 24: '金毛', 31: '哈士奇'}
字典根據 值 排序:
dict_dogs = {'哈士奇': 70, '薩摩耶': 45, '泰迪': 37, '金毛': 127}
dict_order_dogs = dict(sorted(dict_dogs.items(), key=lambda x: x[1])) # 順序
dict_order_dogs = dict(sorted(dict_dogs.items(), key=lambda x: x[1], reverse=True)) # 倒序
print(dict_order_dogs) # {'金毛': 127, '哈士奇': 70, '薩摩耶': 45, '泰迪': 37}
- 後續再繼續補充更多語法。
以上,便是本章的所有內容了。
在實際編程過程中,會用到的語法數不勝數,不勝枚舉,這裏只將很少一部分常用的語法記錄下來。在編程過程中,各位靈活使用各種語法即可!!
最後來總結一下本章的內容:
- 介紹了lambda函數的使用
- 介紹了Python三個推導式的使用
- 介紹了Python根據字典(dict)的鍵或值排序
- 感謝你的耐心觀看,點關注,不迷路。
- 爲方便菜雞互啄,歡迎加入QQ羣組織:648696280
下一篇文章,名爲 《Python爬蟲從入門到放棄 04 | Python爬蟲打響第一炮之請求網頁》。