zoukankan      html  css  js  c++  java
  • python中高阶函数与装饰器(3)

    >>> f = lambda x: x * x
    >>> f
    <function <lambda> at 0x101c6ef28> >>> f(5) 25

    def f(x):
        return x * x

    关键字lambda表示匿名函数,冒号前面的x表示函数参数。

    匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

    import time
    def foo():
    print("foo...")

    #遵守开放封闭原则对原有函数不能直接修改

    def show_time(func):
    start = time.time()
    func()
    end = time.time()
    print('spend time %s' % (end-start))
    用其他函数直接调用会使函数名更换

    def logger(flag =''):
    def show_time(f):
    def inner(*args):
    start = time.time()
    f(*args)
    end = time.time()
    print('speed %s'%(end-start))
    if flag == 'true':
    print('日志记录')
    return inner
    return show_time
    #添加装饰器函数


    @logger('true')#foo = show_time(foo)
    def foo():
    print("foo...")
    time.sleep(2)

    @logger()#bar =show_time(bar)
    def bar():
    print('foo,,,')
    time.sleep(2)

    #@show_time#foo = show_time(foo)
    def add(*args):
    sum=0
    for i in args:
    sum+=i
    print(sum)
    time.sleep(1)

    add(1,2,4,4)

    此时函数的_name_属性已经改变

    import functools

    def log(text):
        def decorator(func):
            @functools.wraps(func)#此语句将返回的wrapper函数名的_name_属性改为func
            def wrapper(*args, **kw):
                print('%s %s():' % (text, func.__name__))
                return func(*args, **kw)
            return wrapper
        return decorator

  • 相关阅读:
    关于TileBrush中Viewbox,Viewport以及Stretch,AlignmentX/Y的详细研究
    ListBox数据绑定无效
    WPF---Effect效果
    wpf 画刷的分类
    LinearGradientBrush,RadialGradientBrush的样式说明
    改变ListBoxItem选中的颜色
    自定义的 ListBoxItem 自适应ListBox的宽度
    WPF ListBox数据绑定
    ItemsPanelTemplate的用法
    svn报错Item is not readable svn解决方案
  • 原文地址:https://www.cnblogs.com/MY0213/p/7766794.html
Copyright © 2011-2022 走看看