day11 - 15(装饰器、生成器、迭代器、内置函数、推导式)
生活随笔
收集整理的這篇文章主要介紹了
day11 - 15(装饰器、生成器、迭代器、内置函数、推导式)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
day11:裝飾器(裝飾器形成、裝飾器作用、@語法糖、原則、固定模式)
裝飾器形成:最簡單的、有返回值的、有一個參數的、萬能參數
1 FLAG = False 2 def timmer(func): 3 global FALG 4 def inner (*args,**kwargs): 5 start = time.time() 6 if FLAG: 7 res = func() 8 else: 9 res = '登錄失敗' 10 return res 11 return inner 12 13 def Login(): 14 login_user = input('請輸入賬號:') 15 login_pass = input('請輸入密碼:') 16 with open('user.txt','r',encoding='utf-8') as f: 17 for i in f: 18 if 'login_user' in i: 19 user_name,user_pass = '|'.join(i) 20 break 21 if login_user == user_name and login_pass == user_pass: 22 global FLAG 23 FLAG = True 24 else: 25 print('登錄失敗') 26 continue 27 28 29 @timmer 30 def func(a,b): 31 print(a,b) 32 return '***:%s;***%s' %(a,b) 33 34 while 1: 35 command = input('請輸入操作序號:]\n1:登錄\n2:執行') 36 if command == '1': 37 Logon() 38 elif command == '2': 39 func() 40 else: 41 print('您的輸入有誤,請重新輸入') 42 continue 第一題
?
?
day12:裝飾器的進階(wraps模塊、進階)
1 from functools import wraps 2 3 4 def timmer(func): 5 @wraps(func) 6 def inner(*args,**kwargs): 7 """這個是inner""" 8 res = func(*args,**kwargs) 9 return res 10 return inner 11 12 13 @timmer 14 def func1(a,b): 15 """這個是func1""" 16 print(a,b) 17 return '%s *** %s' % (a,b) 18 19 20 print(func1.__name__) 21 print(func1.__doc__) wraps例子
1 from functools import wraps 2 FLAGE = True 3 4 def timmer(flage): 5 def wrapper(func): 6 @wraps(func) 7 def inner(*args,**kwargs): 8 if flage: 9 print('裝飾前被執行前做的事') 10 res = func(*args,**kwargs) 11 print('裝飾器被執行后做的事') 12 return res 13 else: 14 res = func(*args,**kwargs) 15 return res 16 return inner 17 return wrapper 18 19 20 @timmer(FLAGE) 21 def func1(a,b): 22 print('執行了,收到了%s 和 %s' %(a,b)) 23 print(func1.__name__) 24 return 'Ok' 25 26 27 @timmer(FLAGE) 28 def func2(a,b): 29 print('執行了,收到了%s 和 %s' %(a,b)) 30 print(func2.__name__) 31 return 'Ok' 32 33 34 print(func1('董','軒')) 35 print(func2('Python','蟒蛇')) 多個函數同時裝飾
1 def wrapper1(func): 2 def inner(*args,**kwargs): 3 print('wrapper1 start') 4 res = func(*args,**kwargs) 5 print(res) 6 print('wrapper1 end') 7 return res 8 return inner 9 10 11 def wrapper2(func): 12 def inner(*args,**kwargs): 13 print('wrapper2 start') 14 res = func(*args,**kwargs) 15 print(res) 16 print('wrapper2 end') 17 return res 18 return inner 19 20 21 def wrapper3(func): 22 def inner(*args,**kwargs): 23 print('wrapper3 start') 24 res = func(*args,**kwargs) 25 print(res) 26 print('wrapper3 end') 27 return res 28 return inner 29 30 31 @wrapper3 32 @wrapper2 33 @wrapper1 34 35 def func(): 36 print(func.__name__) 37 return 'Func執行完了' 38 39 40 41 print(func()) 一個函數被多個裝飾器調用
?
day13:(迭代器、生成器)
1 from collections import Iterable 2 from collections import Iterator 3 print(isinstance([],Iterable)) 4 print(isinstance([],Iterator)) 檢驗方法
?
1 def generator(): 2 print(1) 3 yield 'a' 4 5 6 # 取值 7 ret = generator() 8 print(ret.__next__()) 簡單生成器
?
day14:(生成器函數進階、表達式、各種推導式)
1 def average(): 2 sum = 0 3 count = 0 4 avg = 0 5 while True: 6 num = yield avg 7 sum += num # 10 8 count += 1 # 1 9 avg = sum/count 10 11 avg_g = average() 12 print(avg_g.__next__()) 13 avg1 = avg_g.send(10) 14 avg1 = avg_g.send(20) 15 avg1 = avg_g.send(30) 16 print(avg1) 獲取平均值
?
1 def init(func): #裝飾器 2 def inner(*args, **kwargs): 3 g = func(*args, **kwargs) #g = average() 4 g.__next__() 5 return g 6 return inner 7 8 @init 9 def average(): 10 sum = 0 11 count = 0 12 avg = 0 13 while True: 14 num = yield avg 15 sum += num # 10 16 count += 1 # 1 17 avg = sum/count 18 19 20 avg_g = average() #===> inner 21 ret = avg_g.send(10) 22 print(ret) 23 ret = avg_g.send(20) 24 print(ret) 預激生成器的裝飾器
?
1 def generator(): 2 a = 'abcde' 3 b = '12345' 4 for i in a: 5 yield i 6 for i in b: 7 yield i 8 def generator(): 9 a = 'abcde' 10 b = '12345' 11 yield from a 12 yield from b 13 14 g = generator() 15 for i in g: 16 print(i) 小技巧
?
g = (i for i in range(10)) print(g) for i in g:print(i)
?
1 # 列表: 2 ret = [i*i for i in (1,2,3,4) if i%3 == 0] 3 print(ret) 4 例子: 5 找到嵌套列表中名字含有兩個‘e’的所有名字 6 names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], 7 ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] 8 ret = [name for lst in names for name in lst if name.count('e') ==2] # 列表 9 ret = (name for lst in names for name in lst if name.count('e') ==2) # 字典 10 for i in ret: 11 print(i) 12 13 14 # 字典: 15 mcase = {'a': 10, 'b': 34} 16 mcase_frequency = {mcase[k]: k for k in mcase} 17 print(mcase_frequency) 18 19 #集合推導式,自帶結果去重功能 20 squared = {x**2 for x in [1, -1, 2]} 21 print(squared) 各種推導式
?
day15:(面試題、內置函數)
一、 def demo():for i in range(4):yield ig=demo()g1=(i for i in g) g2=(i for i in g1)print(list(g)) print(list(g1)) print(list(g2))二、 def add(n,i):return n+idef test():for i in range(5):yield ig=test() for n in [1,10,5]:g=(add(n,i) for i in g)print(list(g))
?
?
轉載于:https://www.cnblogs.com/-xuan/p/10246188.html
總結
以上是生活随笔為你收集整理的day11 - 15(装饰器、生成器、迭代器、内置函数、推导式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: activiti集成spring
- 下一篇: 数据库时间内接受的是lang类型的时间