zoukankan      html  css  js  c++  java
  • 装饰器,生成器

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

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

    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 和普通函数一样返回








  • 相关阅读:
    高程5.4 RegExp类型
    高程5.3 Date类型
    高程5.2.9归并方法
    20151119js上课总结
    从0~100之间随机取出不重复的10个数
    高程5.2.8迭代方法
    HTML常用标签
    20151118小问题
    20151117小问题
    《QT Creator快速入门》
  • 原文地址:https://www.cnblogs.com/wuqingzangyue/p/5749731.html
Copyright © 2011-2022 走看看