• 装饰器,生成器


    装饰器:使用装饰函数在函数执行前和执行后分别附加额外功能

    使用装饰函数在函数执行前和执行后分别附加额外功能

    def deco(func):
        print("before myfunc() called.")
        func()
        print("  after myfunc() called.")
        return func

     

    def myfunc():
        print(" myfunc() called.")

     

    myfunc = deco(myfunc)


    都是一样的

    def deco(func):
        print("before myfunc() called.")
        func()
        print("  after myfunc() called.")
        return func

     

    @deco
    def myfunc():
        print(" myfunc() called.")


    装饰起是把函数或者类进行专门处理的闭包,也就是把跟直接这么写相同(myfunc = deco(myfunc)) 对demo函数对输入输出进行处理,不改变原函数


    生成器原理:这种一边循环一边计算的机制,下一个元素是通过计算得到的,不是已经存在的

    生成器只要把一个列表生成式的[]改成(),就创建了一个generator:

    >>> L = [x * x for x in range(10)]
    >>> L
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    >>> g = (x * x for x in range(10))
    >>> g
    <generator object <genexpr> at 0x104feab40>

    generator的next()方法:把元素一个一个打印出来

    >>> g.next()
    0
    >>> g.next()
    1
    >>> g.next()
    4

    生成斐波拉契数列

    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b
            a, b = b, a + b
            n = n + 1

    yield为生成器的关键字,遇到yield代表停止,遇到return 和普通函数一样返回








  • 相关阅读:
    Revolving Digits[EXKMP]
    字符加密Cipher(bzoj 1031)
    Hotaru's problem
    1089 最长回文子串 V2(Manacher算法)
    3172: [Tjoi2013]单词
    3689: 异或之
    3942: [Usaco2015 Feb]Censoring [KMP]
    2795: [Poi2012]A Horrible Poem
    GT考试(bzoj 1009)
    NOIP2016提高组解题报告
  • 原文地址:https://www.cnblogs.com/wuqingzangyue/p/5749731.html
Copyright © 2020-2023  润新知