def
test
(n):
for x in
range(1
,n+1):
yield x
a = test(5)
# 使用next()呼叫
print
(next
(a))
# 1print
(next
(b))
# 2# 使用for in 遍歷
for i in test(5)
:print
(i)
print
(test(5)
)# 1
print
(test(5)
)# 1
x =
(i for i in
range(0
,5))
print
(next
(x))
#0print
(next
(x))
#1for z in x:
print
(z)# 0,1,2,3,4
可以直接使用for…in的資料型別都叫可迭代物件
迭代器不僅可以用for…in遍歷,還可以用next()獲取其中的元素
迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter() 和 next()。
字串,列表或元組物件都可用於建立迭代器.
from collections import iterable
isinstance(a,iterable)
# a是否可迭代物件
from collections import iterator
isinstance(
,iterator)
#false
isinstance(
(x for x in
range(0
,5))
# true
結論:list、set、tuple、dict、string是可迭代物件,但是,不是迭代器,只有⽣成器才是迭代器
print
(isinstance
(iter([
]),iterator)
)#true
包是為了解決模組重名問題,python引⼊了以⽬錄⽅式組織模組,稱之為包package),⼀個包中可以包含模組、包。python的包中必須包含⼀個特殊⽂件,被命名為__ init__.py,這⽂件告訴直譯器這是⼀個包,⽽⽬錄則不要求⼀定要有,這是⽬錄和包的區別;另外可以使⽤import導⼊包中的模組,但⽬錄不⾏。
包名和模組名通常為全部小寫,避免使用下劃線。
在python中,模組是**組織的⼀種⽅式,把功能相近的函式放到⼀個⽂件中,⼀個⽂件(.py)就是⼀個模組(module),模組名就是⽂件名去掉字尾py。這樣做的好處是:
提⾼**的可復⽤、可維護性。⼀個模組編寫完畢後,可以很⽅便的在其他項⽬中導⼊解決了命名衝突,不同模組中相同的命名不會衝突。
當導⼊⼀個模組時,直譯器先在當前包中查詢模組,若找不到,然後在內建的built-in模組中查詢,找不到則按sys.path給定的路徑找對應的模組⽂件(模組名.py)
import 包名.模組
from module import name1
from module import
*import module as 別名
匯入時,會自動執行被匯入模組中的可執行**。如果不想執⾏,可以在被匯入模組中使⽤__ name__ 屬性進⾏判斷,如果該模組是當前模組,不是導⼊模組,name __ 的值是__main
def
abc(a)
:print
(a.upper())
if __name__ ==
'__main__'
:# 2.所以有這句話表示只有非匯入狀態才執行下面的語句
abc(
"abcdefg"
)# 否則如果被匯入,會自動執行本語句
函式 生成器 迭代器
1.函式 1 函式的好處就是能將固定功能的模組封裝起來,在需要多次實現這個功能的時候就呼叫函式避免 的重複書寫,過於冗長 2 傳參 依次往後放這是規定 num,args,a 2,kwargs 中間兩個交換位置不影響 位置引數 引數關鍵字引數 引數 3 返回值函式執行沒遇到return返回值一定為no...
生成器 迭代器
最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...
迭代器,生成器
迭代器 生成器 生成器的第1種實現方式 列表生成式改為生成器 python中yield關鍵字 函式中如果有yield,那麼呼叫這個函式的返回值為生成器。當生成器g呼叫next方法,執行函式,知道遇到yield就停止 再執行next,從上一次停止的地方繼續執行 函式中遇return直接退出,不繼續執行...