装饰器,生成器,迭代器

it2022-05-07  18

装饰器:     器:代表函数   装饰:装饰其他函数

  装饰器原则:     不能修改被装饰函数的源代码     不能修改被装饰函数的调用方式

  实现装饰器:     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


最新回复(0)