python基礎知識(六)函式 (五)

2021-09-18 07:05:40 字數 2547 閱讀 4577

目錄

(六)函式----(五)

6.1迭代器

6.2可迭代協議,迭代器協議

6.3迭代器的好處

#迭代器含有兩個__iter__()和__next__()函式方法(就是迭代器協議)

#dir() 列印所有擁有的方法

print('__iter__' in dir( .__iter__()))

print('__next__' in dir( .__iter__()))

首先我們要知道可以被for迴圈的有哪些?

只有 是可迭代物件的時候 才能用for

當我們遇到乙個新的變數,不確定能不能for迴圈的時候,就判斷它是否可迭代

str,list,tuple,dic,set,f = open(),range(),enumerate

#可以使用for迴圈的有str,list,tuple,dic,set,f = open(),range(),enumerate

l = [1,2,3,4]

for i in l:

print(i)

思考:int,bool可以嗎?為什麼有的可以迴圈,有的不可以迴圈

補充:dir()函式不帶引數時,返回當前範圍內的變數、方法和定義的型別列表;

帶引數時,返回引數的屬性、方法列表。

print(dir())   #返回列表擁有的所有方法

ret = set(dir())&set(dir({}))&set(dir(''))&set(dir(range(10)))

print(ret) #iterable

#都含有__iter__

# print('__iter__' in dir(list))

# print('__iter__' in dir(dict))

# print('__iter__' in dir(set))

# print('__iter__' in dir(tuple))

# print('__iter__' in dir(enumerate()))

# print('__iter__' in dir(range(1)))

只要是能被for迴圈的資料型別 就一定擁有__iter__方法

print(.__iter__()) 乙個列表執行了__iter__()之後的返回值就是乙個迭代器

迭代器含有兩個__iter__()和__next__()函式方法

print(dir()) #列表含有的所有方法

print(dir(.__iter__())) #是乙個迭代器

print(set(dir(.__iter__())) - set(dir()))

#__length_hint__() #元素個數

print([1,'a','bbb'].__iter__().__length_hint__())

#3 3個元素

__next__() #從迭代器中乙個乙個取值

l = [1,2,3]

iterator = l.__iter__()

print(iterator.__next__())

print(iterator.__next__())

print(iterator.__next__())

'''123

'''

可迭代的:含有__iter__就是可迭代的

可迭代協議:內部含有__iter__方法

迭代器含有兩個__iter__()和__next__()函式方法(就是迭代器協議

print('__iter__' in dir( .__iter__()))

print('__next__' in dir( .__iter__()))

#自定義乙個迭代器

from collections.abc import iterable

from collections.abc import iterator

class a:

def __iter__(self):pass

def __next__(self):pass

a = a()

print(isinstance(a,iterator)) #迭代器(判斷是不是迭代器)

print(isinstance(a,iterable)) #可迭代的

#true

#true

#沒有__next__()就不是迭代器,但是可迭代的

迭代器的好處:  從容器型別中乙個乙個的取值,會把所有的值都取到。

節省記憶體空間 迭代器並不會在記憶體中再占用一大塊記憶體 

而是隨著迴圈 每次生成乙個 每次next每次給我乙個

print(range(100000000000000))

for i in range(2000000):

print(i)

#gg了

python基礎知識(六)函式 (八)

目錄 六 函式 八 6.1匿名函式的格式 6.2匿名函式和五個特殊的內建函式可以結合使用 6.3面試題練一練 lambda 引數,引數2 返回值表示式 def add x,y return x y add lambda x,y x y print add 1,4 匿名函式在內建函式 max 求最大值...

python 基礎知識六 內建函式(1)

coding utf 8 abs 函式 返回數字的絕對值。print abs 45 45 print abs 100.12 100.12 print abs 119l 119 特例 複數 返回 a 2 b 2 開根 print abs 1 2j 2.23606797749979 print abs ...

python中基礎知識(六)

列表 元組 共同點 都是通過索引引用元素值 不同點 列表是可讀寫的,元組是唯讀的 names bill mike john mary numbers 1234 4321 6789 6543 print numbers names.index mike print names numbers.inde...