Python(72)_生成器函数与装饰器复习

Posted sunnybowen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python(72)_生成器函数与装饰器复习相关的知识,希望对你有一定的参考价值。

1  装饰器复习,注意打印的顺序

#-*-coding:utf-8-*-
import os
import time
‘‘‘
语法糖
‘‘‘
def wrapper(f):  # 装饰器函数 ,f是被装饰的函数
    def inner(*args,**kwargs):  # 定义了内部函数,一定和return inner对应
        ‘‘‘ 在被装饰函数执行前要做的事情‘‘‘
        print(在被装饰函数执行前要做的事情)
        ret = f(*args,**kwargs) # 这句话是真正函数的执行
        ‘‘‘ 在被装饰函数执行后要做事情‘‘‘
        print(在被装饰函数执行后要做事情)
        return  ret
    return inner
@wrapper  #装饰器函数 相当于  func = wrapper(func)
def func(day): # 被装饰的函数
    time.sleep(0.01)
    print(全体放假%s天%day)
    return 好开心
print(func(10))

技术分享图片

技术分享图片

技术分享图片

 


2   聚合与散

def outer(*args,**kwargs):
    print(args)  # 元组 (1, 3, 5, 6)
    print(*args) # 1 3 5 6  *在print函数里能用,打散。和传参的*作用的等价的
    def inner(*args):  # 聚合成1234
        print(inner:,args)   #(1, 3, 5, 6)
    inner(*args)

outer(1,3,5,6)  # = outer(*[1,2,3, 4])
#outer(*[1,2,3, 4])

技术分享图片

 


3  普通函数

#-*-coding:utf-8-*-
import os
import time
‘‘‘
生成器函数
‘‘‘
def generator():
    print(1)
    return a

ret = generator()
print(ret)

技术分享图片


4、生成器的定义

#-*-coding:utf-8-*-
import os
import time
‘‘‘
生成器函数
   1、含有yield关键字的函数
   2、yield不能和return共用,且需要写在函数内部
‘‘‘
def generator():
    print(1)
    yield a   
# 生成器函数执行后会得到一个生成器作为返回值   <generator object generator at 0x7f794e030200>
ret = generator()
print(ret) 
# ret.__next__()  迭代器 ,迭代器一般不同,用for循环就可以了
print(ret.__next__()) # 触发生成器里面的代码

技术分享图片


5、for循环与迭代器和生成器的关系

#-*-coding:utf-8-*-
import os
import time
‘‘‘
生成器函数
   1、含有yield关键字的函数
   2、yield不能和return共用,且需要写在函数内部
   3、yield和next配合,迭代器,生成器
‘‘‘
def generator():
    print(1)
    yield a
    print(2)
    yield b
    yield c
# 生成器函数执行后会得到一个生成器作为返回值   <generator object generator at 0x7f794e030200>
ret = generator()   # 这是生成器,上面是生成器函数
print(ret)
# ret.__next__()  迭代器 ,迭代器一般不同,用for循环就可以了
# print(ret.__next__()) # 触发生成器里面的代码
# print(ret.__next__())
# print(ret.__next__())


for i in ret:
    print(i)

技术分享图片


 6、哇哈哈函数

def wahaha():
    for i in  range(2000):
        yield 哇哈哈%s%i

g = wahaha()  # 生成器
count = 0
for i in g:
    count +=1
    print(i)
    if count >50:
        break;
print(*******,g.__next__())

技术分享图片


7、方法  __name____doc__

def wahaha():
    ‘‘‘
    一个打印哇哈哈的函数
    :return:
    ‘‘‘
    for i in  range(2000):
        yield 哇哈哈%s%i

g = wahaha()  # 生成器
count = 0
for i in g:
     count +=1
    # print(i)
    # if count >50:
    #     break;
print(*******,g.__next__())
print(wahaha.__name__)
print(wahaha.__doc__)

技术分享图片


8、方法  __name__ 与 __doc__ 升级

#-*-coding:utf-8-*-
import os
import time
from functools import wraps
‘‘‘
‘‘‘
def wrappper(func):
    @wraps(func)  # 固定的,func传进去
    def inner(*args,**kwargs):
        print("")
        ret = func(*args,**kwargs)
        print("")
        return  ret
    return inner
@wrappper   # 不可少!
def holiday(day):
    ‘‘‘
    这是一个放假通知
    :param day:
    :return:
    ‘‘‘
    print(全体放假%s天%day)
    return 好开心
holiday(10)
print(holiday.__name__)
print(holiday.__doc__)

技术分享图片

 

以上是关于Python(72)_生成器函数与装饰器复习的主要内容,如果未能解决你的问题,请参考以下文章

python-flask复习—— 装饰器的坑及解决办法flask中的路由/实例化配置/对象配置/蓝图/特殊装饰器(中间件重定义错误页面)

Python自动化开发04

Python基础复习函数篇

python学习第四天,列表生产式,匿名函数,生成器,内置函数,迭代器,装饰器,json和pickle的序列化和反序列化

Python全栈之路Day21

python描述符property函数(类)装饰器实例解析