装饰器: 器:代表函数 装饰:装饰其他函数
装饰器原则: 不能修改被装饰函数的源代码 不能修改被装饰函数的调用方式
实现装饰器: 1 函数即变量 (匿名函数没有函数名,使用完就会被回收) 2 高阶函数 a:把一个函数名当做实参传给另外一个函数 b:返回值中包含函数名 3 嵌套函数 a:在函数体内用def声明一个函数
4 闭包:函数接受的参数可以传递给内嵌函数里 一个简单的装饰器:
def timer(func): def test2(*args): # 可变参数能接收不一样的环境 start_time = time.time() func(*args) end_time = time.time() print("时间间隔是: --> %s " % (end_time - start_time) ) return test2 # 返回的一定是函数名, 不能带(), 否则会出错 @timer def test1(): time.sleep(3) print('in test1')
用法:
在要被装饰的函数前加上@装饰器名, 这句话相当于test1 = timer(test1)
列表生成式: [ i*i for i in range(10) ]生成器: 分为列表生成器和函数生成器 注意, 生成器只能迭代一次, 使用完了就完了, 在处理超大数据的时候合适 列表生成器: 将列表生成器的中括号换成小括号 ( i*i for i in range(10) ) 与list的区别; 调用时候才生成, 特别快, 不使用不占内存 不支持切片 只记录当前位置, __next__()方法 函数生成器: yield:返回一个值, 此时程序等待下次调用, 处于挂起状态 send:可以给yield传值 生成器的例子: import time def consumer(name): print("ready for beef") while True: beef = yield print("beef %s comes, eaten by %s" % (beef, name)) def producer(name): c1 = consumer('A') c2 = consumer('B') c1.__next__() c2.__next__() print("doing meet beef") for i in range(3): time.sleep(1) print("1 beef made, 2 copule") c1.send(i) c2.send(i) producer("hinimix") 迭代器: 生成器是迭代器(Iterator), list,dict,str是可以迭代的, 但是不是迭代器 迭代器转换iter() 注意 凡是可作用与for循环的都是Iterable类型 凡是可作用于next()函数的对象都是Iterator类型,
转载于:https://www.cnblogs.com/hinimix/p/8080075.html