Python中yield用法學習示例

2021-10-01 12:53:46 字數 1952 閱讀 8104

本文以乙個爬蟲示例,來記錄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()

print

(next

(a))

print

(next

(a))

print

(next

(a))

print

(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...