生成器 裝飾器 迭代器

2021-09-25 07:45:41 字數 1562 閱讀 9664

列表生成器:

def f(n):

return n**3

a=[f(x) for x in range(100)]

print(a)

print(type(a))

生成器:

生成器一共兩種建立方式:

1.(x for i in range(0))

2.yield

生成器在建立的時候已經決定了能計算出值的個數,呼叫next的次數超過這個值就會報錯stopiteration

def fib(max):

a,b,c=0,0,1

while aprint(next(g))

print(next(g))

# send可以給yield前的變數賦值 g.send(none)等同於next(g) 第一次send前如果沒有next,只能傳乙個send(none)

print(g.send('djhsd'))

裝飾器:

軟體開發中的乙個原則「開放-封閉」原則,簡單來說,它規定已經實現的功能**不允許被修改,但可以被擴充套件,即:

封閉:已實現的功能**塊不應該被修改

開放:對現有功能的擴充套件開放

python內建的@property裝飾器就是負責把乙個方法變成屬性呼叫的

import time

def time_logger(flag=0):

def show_time(func):

start_time = time.time()

func(*args, **kwargs)

end_time = time.time()

print('spend %s' % (end_time - start_time))

if flag:

print('將這個操作的時間記錄到日誌中')

return show_time

@time_logger(3) #@show_time等於add=show_time(add)

def add(*args, **kwargs):

time.sleep(1)

sum = 0

for i in args:

sum += i

print(sum)

add(3, 7, 5)

迭代器:

迭代器滿足迭代器協議兩個條件:內部有iter方法,內部有next方法

生成器都是迭代器

可迭代物件:tuple,list,dict,string

l=[1,1,3,4,5,6,7]

d=iter(l)

print(d)

for 迴圈內部三件事

1.呼叫可迭代物件的iter方法返回乙個迭代器物件

2.不斷呼叫迭代器物件的next方法

3.處理stopiteration異常

裝飾器,生成器,迭代器

裝飾器 import time def show time func def inner x start time time.time func x end time time.time print end time start time return inner show time def add...

迭代器 生成器 裝飾器

1.迭代器 1 定義 同時滿足 iter 方法和next 方法的物件就是迭代器。3 型別 可迭代物件通過iter 轉為迭代器 生成器是一種特殊的迭代器。2.生成器 1 定義 生成器是迭代器的一種,包括含有yield關鍵字函式和生成器表示式。2 用法 所有函式呼叫的引數都是第一次呼叫時保留的,而不是新...

生成器 迭代器 裝飾器

迭代器表面上看是乙個資料流物件或者容器,當使用其中的資料時,每次從資料流中取出乙個資料,直到資料被取完,而且資料不會被重複使用。從 的角度來看,迭代器是實現了迭代器協議方法的物件和類。迭代器協議方法主要是兩個 iter 該方法返回物件本身,它是for語句使用迭代器的要求 next 方法用於返回容器中...