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   #这里不要再加括号了!

     

  • 相关阅读:
    数据库
    linux
    linux
    python_函数进阶1
    python_函数初识
    python_文件操作
    python_基础数据类型补充
    python 小数据池,代码块总览
    python_基础数据类型二
    python_基础数据类型一
  • 原文地址:https://www.cnblogs.com/zhengmeisong/p/13683290.html
Copyright © 2011-2022 走看看