• py装饰器,生成器,迭代器


    emmmmm....看了好久才能大概的看懂一点关于装饰器的内容...
    import sys # 引入sys模块
    import time
    import functools
    from functools import reduce # python3中全局变量中没有了reduce函数,此函数被放进functools模块中


    # 装饰器:装饰器就是一个高阶函数接受一个函数作为参数,并在内部将其进行包装,然后返回一个新的函数
    def log(f):
    def fn(x): #被返回的新函数
    print('这是一个装饰器') # 新添加的功能
    return f(x) # 返回原函数

    return fn

    @log
    def perfomance(f):
    print('装饰器已经调用')


    perfomance(1)


    # 从上面可以看出,先定义好这个装饰器的功能,然后将其装饰到另一个函数上就可以了


    # 以下是带参数的装饰器,emmmm,应该就是也可以使用该参数的吧...和其他普通的带参数的函数应该是一样的...
    def performance(unit):
    def perf_decorate(f):
    def wrapper(*args, **kw): #*args是可变参数,用于元组,**kw是关键字参数,用于字典,emmm....没有理解...只知道他们都可以传递任意个参数的样子...
    t1 = time.time()
    r = f(*args, **kw)
    t2 = time.time()
    t = (t2 - t1) * 1000 if unit == 'ms' else t2 - t1 # 计算调用f函数花费的时间
    print('call %s() in %f %s' % (f.__name__, t, unit))
    return r

    return wrapper

    return perf_decorate


    @performance('ms')
    def factorial(n):
    return reduce(lambda x, y: x * y, range(1, n + 1))


    print(factorial(10))
    # 迭代器:可以记住遍历的位置的对象,基本方法有iter()和next(),如下所示:
    l = [1, 2, 3, 4]
    it = iter(l) # 创建迭代器对象
    print(next(it)) # 输出迭代器的下一个元素
    # for x in it:
    # print(x) # 迭代器只能向前,所以for循环是从2开始迭代的。
    ''' 生成器:在python中,使用了yield的函数被称为生成器,生成器就是一个返回迭代器的函数,
    只能用于迭代操作,在调用生成器运行时,每次碰到yield时函数暂停并保存当时所有的运行信息,返回yield的值。
    '''


    def febonacci(n): # 生成器函数
    a, b, counter = 0, 1, 0
    while True:
    if counter > n: # 当超过预想值时,停止运行,返回0
    return
    yield a # 函数暂停,并保存a的信息
    a, b = b, a + b
    counter += 1


    f = febonacci(10) # f是一个迭代器,有生成器返回生成

    while True:
    try:
    print(next(f), end=" ")
    except StopIteration:
    sys.exit()
  • 相关阅读:
    WPF窗体设计不符合微软自己的UX Guide
    NUnit测试WPF程序的一个小技巧
    Windows Vista中五花八门的菜单赏析
    忙碌文档
    怎样做才能算是一个UX良好的软件
    编写帮助文档经验总结
    [WPF Bug清单]之(7)——顽固的Error Template
    让NSIS生成的安装包在静默安装时从命令行窗口输出安装信息
    [WPF Bug清单]之(9)——消失的光标
    [提个醒] C#中yield return的小缺点
  • 原文地址:https://www.cnblogs.com/li-shang/p/8289460.html
Copyright © 2020-2023  润新知