zoukankan      html  css  js  c++  java
  • python进阶

    1. 函数的执行与传递

    当你把一对小括号放在后面,这个函数就会执行;然而如果你不放括号在它后面,那它可以被到处传递,并且可以赋值给别的变量而不去执行它。参考菜鸟教程

    2. 装饰器

    说人话的解释:理解 Python 装饰器看这一篇就够了 代码略难懂,修改如下,不用装饰器:

    def use_logging(func):
        def wrapper():
            logging.warn("%s is running" % func.__name__)
            return func()    # 把 foo 当做参数传递进来时,执行func()就相当于执行foo()
        return wrapper
    
    def foo():
        print('i am foo')
    
    test = use_logging(foo)  # 因为装饰器use_logging(foo)返回的是函数对象wrapper,这条语句相当于test = wrapper
    test()            

    或者在wrapper后面加()才会被执行

    def use_logging(func):
        def wrapper():
            logging.warn("%s is running" % func.__name__)
            return func()   # 把 foo 当做参数传递进来时,执行func()就相当于执行foo()
        return wrapper()    # 注意这里的括号
    
    def foo():
        print('i am foo')
    
    use_logging(foo)  

     

    使用装饰器的写法, 第一种:

    def use_logging(func): 
    def wrapper():
    logging.warn("%s is running" % func.__name__)
    return func() # 把 foo 当做参数传递进来时,执行func()就相当于执行foo()
    return wrapper

    @use_logging
    def foo(): print('i am foo') foo()

       第二种:

    def use_logging(func): 
        def wrapper(): 
            logging.warn("%s is running" % func.__name__) 
            return func() # 把 foo 当做参数传递进来时,执行func()就相当于执行foo() 
        return wrapper() 
    
    @use_logging
    def foo():
        print('i am foo')
    
    foo   #这里不要再加括号了!

     

  • 相关阅读:
    Photoshop
    前端性能优化
    Angular Cli和npm、node.js命令
    Angular项目结构
    页面布局
    滚动条与height
    1.2 Angular入门
    前端的e2e测试
    Angular的部署
    jQuery插件开发的基本形式
  • 原文地址:https://www.cnblogs.com/zhengmeisong/p/13683290.html
Copyright © 2011-2022 走看看