一、生成器
通過yield關(guān)鍵字將函數(shù)對象變成迭代器對象蜈七,這種叫做生成器,其本質(zhì)就是迭代器
def? ? func():
? ? ? ? print(111)
? ? ? ? yield? ? 1
????????print(222)
? ? ? ? yield? ? 2
? ??????print(333)
? ? ? ? yield? ? 3
斐波那契數(shù)列
end是次數(shù)
def? ? fib(end):
? ? ? ? # n是初始次數(shù)值莫矗,a飒硅,b都是開始的兩個值
? ? ? ? n,a,b = 0,0,1
? ? ? ? while? ? n<end:
? ? ? ? ? ? ? ? a,b = b,a+b
? ? ? ? ? ? ? ? yield b
? ? ? ? ? ? ? ? n += 1
例1:
#裝飾器
def? ? func(f):
? ? ? ? def? ? func1():
? ? ? ? ? ? ? ? print('我是額外增加的函數(shù)')
? ? ? ? reuturn? ? dunc1
#使用裝飾器
@func
def? ? test():? ?
? ? ? ? print('我是基礎(chǔ)函數(shù)')
test()
>>>我是額外增加的函數(shù)
例2:
#裝飾器
def? ? func(f):
????def? ? func1():
? ? ? ? f()
????????print('我是額外增加的函數(shù)')
????reuturn? ? dunc1
#使用裝飾器
@func
def? ? test():? ?
? ? ? ? print('我是基礎(chǔ)函數(shù)')
test()
>>>我是基礎(chǔ)函數(shù)
>>>我是額外增加的函數(shù)
#內(nèi)置裝飾器
class? ? Person():????
? ? ? ? def? ? __init__(self,name,age):
? ? ? ? ? ? ? ? self.name = name
? ? ? ? ? ? ? ? self.age = age
? ? ? ? #讓調(diào)用方法可以像調(diào)用屬性一樣
????????@property
? ? ? ? def? ? play(self):
? ? ? ? ? ? ? ? print('這是play方法')
? ? ? ? #第一個參數(shù)自動傳類
? ? ? ? @classmethod
? ? ? ? def? ? learn(cls):
? ? ? ? ? ? ? ? print('這是learn方法')
? ? ? ? #不只需要傳入self或者cls砂缩,靜態(tài)方法
????????@staticmethod
? ? ? ? def? ? sleep():
? ? ? ? ? ? ? ? print('這是sleep方法')
#異常
#放可能存在異常的信息
try:
? ? ? ? print(aaa)
#拋出異常或者返回異常
except? ? NameError? ? as? ? error:
? ? ? ? print('變量名錯誤三娩,錯誤信息%s'%error)
except? ? TyoeError? ? as? ? error:
? ? ? ? print('類型錯誤庵芭,錯誤信息:%s'%error)
except? ? Exception? ? as? ? error:
? ? ? ? print('未知錯誤')
finally:
? ? ? ? print('不管有沒有錯誤,我都執(zhí)行')
#主動拋出異常
raise? ? TypeError
#斷言:如果條件不存在就會報斷言的錯誤
assert? ?2==1
print(1)