列表生成器:
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 方法用於返回容器中...