本文以乙個爬蟲示例,來記錄python學習過程中yield的用法。
目的:爬取****的ip位址、埠及地區資訊,定義乙個函式,該函式為乙個生成器,每次呼叫返回列表中的不同的值(直到遍歷整個列表,即每次呼叫返回乙個不同的ip位址及埠資訊)。
import
requests
from
lxml
import
etree
url =
''header =
response = requests.get(
url=url
,headers
=header).text
html = etree.html(response)
ip_list = html.xpath(
'//div/table/tr/td[2]/text()'
)port_list = html.xpath(
'//div/table/tr/td[3]/text()'
)area_list = html.xpath(
'//div/table/tr/td[4]/a/text()'
)i_list = (x
for
x in
ip_list)
p_list = (y
for
y in
port_list)
a_list = (z
for
z in
area_list)
def
get_proxy
():# for i in range(3):
# print('-' * 10)
# print('ip
列表:',next(i_list))
# print('
埠列表
',next(p_list))
# print('
地區列表
',next(a_list))
# print('-' * 10)
# print(i_list,p_list,a_list)
new_list = [
next
(i_list)
,next
(p_list)
,next
(a_list)]
# 第一次返回
# print(new_list)
for
count
in i_list:
yield
new_list #當第
1次程式執行到此處,直接返回
'第一次返回
'的列表內容
new_list = [
next
(i_list)
, next
(p_list)
, next
(a_list)] #當第
2次呼叫,執行此處語句(從
yield
下面語句開始執行),重新給列表賦新值,然後走迴圈,再次返回列表
new_list,
如此迴圈,直至遍歷
i_list
列表a = get_proxy()
(next
(a))
(next
(a))
(next
(a))
(next
(a))
執行結果如下:
['223.198.1.145', '9999', '海南']
['222.190.163.228', '9999', '浙江金華']
['175.42.68.32', '9999', '江蘇泰州']
['123.163.27.179', '808', '江蘇宿遷市泗陽縣']
Python中的yield用法
在python中,我們將帶有 yield 的函式稱之為 generator 生成器 generator可以一邊迴圈一邊計算,是可迭代物件,也就是說可以使用for迴圈來迭代出generator的各個值。一般為了說明generator,都會使用斐波那契數列來舉例,這裡也不例外 如結果所示,呼叫 fab ...
Python中的yield用法
yield關鍵字用來定義生成器 generator 其具體功能是可以當return使用,從函式裡返回乙個值,不同之處是用yield返回之後,可以讓函式從上回yield返回的地點繼續執行。也就是說,yield返回函式,交給呼叫者乙個返回值,然後再 瞬移 回去,讓函式繼續執行,直到嚇一條yield語句再...
python中 yield的用法
接下來是正題 首先,如果你還沒有對yield有個初步分認識,那麼你先把yield看做 return 這個是直觀的,它首先是個return,普通的return是什麼意思,就是在程式中返回某個值,返回之後程式就不再往下執行了。看做return之後再把它看做乙個是生成器 generator 的一部分 帶y...