1.装饰器

装饰器
把一个函数当作参数,返回一个替代版的函数
本质就是一个返回函数的函数
“在不改变原函数的基础上,给函数增加功能”
有装饰器的会先执行装饰器内容
python学习第六天
对修改是封闭的,对扩展是开放的
time.time()函数返回当前时间的时间戳(1970纪元后经过的浮点秒数)
python学习第六天
python学习第六天

python学习第六天
装饰器实现一个函数计时器
1.问题1:被装饰的函数有返回值
2.问题2:如何保留被装饰函数的函数名和帮助信息文档

 import time
    import random
    import string
    import functools

li = [random.choice(string.ascii_letters) for i in range(100)]
print(li)

def Timer(fun):
    """这是一个装饰器Timer"""
    def wrapper(*args,**kwargs):
        """这是一个wrapper函数"""
        start_time = time.time()
        res = fun(*args,**kwargs)
        end_time = time.time()
        print('运行时间为: %.5f' %(end_time - start_time))
        return res
    return wrapper

@Timer
def con_add():
    s = ''
    for i in li:
        s += (i + ',')
    print(s)

@Timer
def join_add():
    print(','.join(li))

@Timer
def fun_list(n):
    """这是fun_list函数"""
    return [i * 2 for i in range(n)]

@Timer
def fun_map(n):
    return list(map(lambda x:x*2,range(n)))


print(fun_list.__doc__)
print(fun_list.__name__)

print(time.ctime())

python学习第六天
计算函数运行时间
python学习第六天
inspect.getcallargs返回一个字典,key值是形参,value值是对应的实参{‘name’:‘root’}
判断如果是‘root’用户就允许进行添加和删除操作,否则不能进行
python学习第六天

编写装饰器required_types, 条件如下:
1). 当装饰器为@required_types(int,float)确保函数接收到的
每一个参数都是int或者float类型;
2). 当装饰器为@required_types(list)确保函数接收到的每一个参数都是list类型;
3). 当装饰器为@required_types(str,int)确保函数接收到的每一个参数都是str或者int类型;
4). 如果参数不满足条件, 打印 TypeError:参数必须为xxxx类型
python学习第六天
多个装饰器
注意装饰器执行顺序
python学习第六天
python学习第六天

3.第三方模块

qrcode模块:提供生成二维码的接口

python学习第六天
双击pip,搜索qrcode并下载安装
python学习第六天
再下载itchat模块:实现调用微信的第三方模块
python学习第六天
生成一个百度的二维码,扫描直接进入百度python学习第六天
生成一个微信二维码,扫描登录后会给你的filehelper(文件传输助手)发送一个hello,但是一次只能一个人扫
python学习第六天

python学习第六天
itchat还有很多有趣的地方,比如统计好友人数,男女比列等

相关文章: