• 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()
  • 相关阅读:
    IE6,IE7,IE8,Firefox 兼容的css hack以及常见兼容性问题
    BAT及各大互联网公司2014前端笔试面试题:HTML/CSS/JAVASCRIPT
    C语言学习
    HDU 3861 The King’s Problem 最小路径覆盖(强连通分量缩点+二分图最大匹配)
    HDU 2089 不要62【解题报告】
    POJ2762 Going from u to v or from v to u? 强连通分量缩点+拓扑排序
    HDU 1754 线段树入门解题报告
    2019/4/22 kmp模板
    2019/4/22 拓扑排序的高效写法. 模板题HDU1285:确定比赛名次
    HDU 2544最短路 【dijkstra 链式前向星+优先队列优化】
  • 原文地址:https://www.cnblogs.com/li-shang/p/8289460.html
Copyright © 2020-2023  润新知