day16 函式(生成器 迭代器 模組與包)

2021-10-03 02:05:37 字數 2372 閱讀 7740

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直接退出,不繼續執行...