python新手入門筆記(十二) 迭代器和生成器

2021-10-08 14:36:03 字數 3927 閱讀 2685

for i in[1

,2,3

]:print

(i)# 遍歷 迭代

# 可迭代物件

上述是一種遍歷,也是迭代,in後面的叫可迭代物件,for迴圈就叫迭代器.

可迭代物件:list、str、tuple、

判斷可迭代物件的方法:isinstance()

from collections import iterable

print

(isinstance([

1,2,

3],iterable)

)print

(isinstance

(,iterable)

)print

(isinstance((

1,),iterable)

)print

(isinstance

('100'

,iterable)

)print

(isinstance

(100

,iterable)

)# false

決定乙個容器是否能被迭代。

乙個容器想成為可迭代物件,必須有iter方法,並且返回乙個迭代器。

class

mylist

:def

__init__

(self)

: self.container =

defadd

(self, item)

:def

__str__

(self)

:return f''

# iter方法是關鍵

def__iter__

(self)

:'''返回乙個迭代器'''

pass

mylist = mylist(

)mylist.add(1)

mylist.add(2)

mylist.add(3)

print

(mylist)

print

(isinstance

(mylist,iterable)

)

乙個物件實現了__iter____next__方法,就是迭代器。

li =[11

,22,33

,44,55

]li_iter =

iter

(li)

print

(next

(li_iter)

)list1 =[1

,2,3

,4,5

]li_iter =

iter

(list1)

# 通過iter方法拿到列表的迭代器

while1:

try:

print

(li_iter.__next__())

# 迴圈呼叫列表迭代器的next方法

except stopiteration as e:

break

定義乙個迭代器

class

myiterator

:'''自定義迭代器'''

def__init__

(self,mylist)

: self.mylist = mylist

# cur 用來記錄當前訪問到的位置

self.cur =

0def

__next__

(self)

:# 當前位置,小於容器長度時

if self.cur <

len(self.mylist.container)

:# 返回位置所對應的元素

item = self.mylist[self.cur]

# 位置加1

self.cur +=

1return item

else

:# 如果已經取完,再次呼叫next則丟擲異常

raise stopiteration

def__iter__

(self)

:# 迭代器本身也是乙個可迭代物件,自身也需要實現__iter__方法

# 也需要乙個迭代器,返回自身即可

myiterator = myiterator(self)

return myiterator

for 迴圈的本質

我們在進行迭代的時候,實際上是在對乙個迭代器進行操作。

列表有推導式,元組也可以做推導式。它們都是生成器。

以下是第一種生成器。

x =

(i for i in

range(10

))print

(x)while

true

:try

:print

(next

(x))

except

:break

第二種生成器:乙個函式只要使用了yield關鍵字,就不再是函式,而是生成器。

def

fib(n)

:if n<=2:

return

1 a,b =0,

1for _ in

range

(n):

a,b = b,a+b

yield a

g = fib(6)

print

(g)while

true

:try

:print

(next

(x))

except

:break

yield

1、相當於return,將後面的值返回

2、函式執行暫停在當前位置,使用next從當前暫停位置繼續執行。

3、除了可以使用next喚醒重新執行外,還可以使用send來喚醒。使用send喚醒時,哈可以傳入資料。

import os

# rename重新命名

os.rename(

'test1.txt'

,'666.txt'

)# remove刪除檔案

os.remove(

'test.txt'

)# mkdir建立資料夾(目錄)

os.mkdir(

'py'

)# rmdir刪除單級空資料夾(目錄)

os.rmdir(

'py'

)# 獲取當前目錄

print

(os.getcwd(

))

makedirs,建立有多層遞迴原則,如os.mkdir('a/b')建立二級目錄,a目錄下有b目錄。

mkdir不能建立已存在的目錄,否則會報錯。所以我們需要加上這麼一句話:

if

not os.path.exists(

'py'):

os.mkdir(

'py'

)

在命令列中執行命令時,由sys模組以列表的形式接收引數。

sys.ar**:

import sys

print

('引數個數為:'

,len

(sys.ar**)

,'個引數。'

)print

('引數列表:'

,str

(sys.ar**)

)

sys.ar** 只提供了比較簡單的命令引數獲取方式,並沒有提供命令提示。無法做到像linux命令一樣,可以給使用者提供help幫助。

python新手入門

1.先看下python的基礎,然後去看 ng的機器學習課程,最後結合周志華的機器學習和 機器學習實戰兩本書 2.盡量不要直接呼叫工具箱,自己去實現演算法 3.先安andconda,再安ide就可以了,pycharm 4.4,測試anaconda,桌面 開始 右下角執行 ipython第乙個 執行 5...

git新手入門筆記

如下圖所示 解釋 最開始 在workspace 工作區 中 add index 暫存區 commit repository 倉庫 push remote 遠端庫 也可以 現在remote中 pull 工作區 7git的基礎操作 7.1 新建乙個資料夾hellogit 7.2 開啟hellogit資料...

Python新手入門英文

四 定義函式與設定引數 1 birthday 出生日期 2 year 年份 3 month 月份 4 day 日期 5 type 型別 6 error 錯誤 7 missing 丟失 8 required 必須 9 positional 位置 10 unsupported 不支援 五 設定收集引數 ...