【问题标题】:Call a function and print function's name调用函数并打印函数名
【发布时间】:2016-04-07 22:53:16
【问题描述】:

我有一个很长的函数列表,我希望能够调用它们并让它们打印它们的名称以及它们何时完成,如下所示。

def call(*functions):
    for f in functions:
        print(f.__name__)
        f()
        print('{} completed'.format(f.__name__))

call(lambda: (long(), lst(), of(), func(), ions()...))

我不想在每个函数周围都写print(f.__name__) ... print('{} completed'.format(f.__name__))。但是,在上面的代码中,它会打印“lambda”(如预期的那样)。如何自动化这些函数调用/打印语句以便正确打印?

【问题讨论】:

    标签: python function loops for-loop


    【解决方案1】:
    def call(*functions):
        for f in functions:
            print(f.__name__)
            f()
            print('{} completed'.format(f.__name__))
    
    call(long, lst, of, func, ions...)
    

    但是,使用map 并简化call 会更符合逻辑:

    def call(function):
        print(f.__name__)
        f()
        print('{} completed'.format(f.__name__))
    
    map(call, (long, lst, of, func, ions...))
    

    【讨论】:

    • 有没有办法做到这一点,每个函数都有不同的参数?我在玩 functools.partial,但 'functools.partial' 对象没有属性 __name__
    • 是的,但是它变成了使用诸如模式之类的装饰器的元编程等等....(对不起,我正在使用手机,现在无法提供更多帮助,但我想看看它...)
    • @Apero 不用担心,我想通了。您需要调用 f.func.__name__ 而不是创建部分对象的 f.__name__ 来打印函数的名称
    【解决方案2】:

    您的想法几乎是正确的,但您想将函数 自身 传递给 call 而不是 lambda。

    就您的代码目前而言,您只传递了 一个 函数,即 lambda,它在您的打印语句之间调用其他函数。

    改变

    call(lambda: (long(), lst(), of(), func(), ions()...))
    

    call(long, lst, of, func, ions...))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 2019-01-29
      • 1970-01-01
      相关资源
      最近更新 更多