【问题标题】:How do I pass a value into a python function without calling?如何在不调用的情况下将值传递给 python 函数?
【发布时间】:2019-06-03 23:11:38
【问题描述】:

我无法找到一种合理的方法来创建一个调用需要参数的函数的变量。

这是我的代码的简化版本。我希望“print_hello”在调用时打印“hello”,而不是在定义时打印。

print_hello = print(‘hello’)

当我定义“print_hello”时,它会调用print(‘hello’)。当我调用“print_hello”时,它给了我一个错误。我该如何解决这个问题?

【问题讨论】:

    标签: python function parameters


    【解决方案1】:

    如果您只想要一个完全符合您描述的函数,Sheldore's answer is the simplest way to go(以及更多使用命名lambda 的 Pythonic)。

    另一种方法是make a partial application of the function with functools.partial,它允许您在调用时传递额外的参数:

    from functools import partial
    
    print_hello = partial(print, "hello")
    
    print_hello()  # Prints "hello" to stdout
    
    print_hello(file=sys.stderr)  # Prints "hello" to stderr
    
    print_hello("world")  # Prints "hello world" to stdout
    

    【讨论】:

      【解决方案2】:

      只需将 print_hello 定义为 lambda 函数

      >>> print_hello = lambda: print('hello')
      >>> print_hello()
      hello
      

      要延迟执行,您必须将对 print 的调用包装在另一个函数中。与定义另一个函数相比,lambda 代码更少。

      注意:pep08 建议在分配给变量时使用 def 函数而不是 lambda。见here。所以@Sheldores answer 可能是要走的路。

      【讨论】:

      • 虽然,这最终会得到一个命名的 lambda,这与 PEP8 相悖
      • 啊好吧,我从来不知道。我应该删除我的答案吗?
      • 这取决于你。它完成了工作,我怀疑操作有 X/Y 问题。让我找到参考
      【解决方案3】:

      您需要定义一个函数。在 python 中,一个函数是使用def 定义的,如下面的一个简单示例所示。然后使用函数名和() 调用函数,例如print_hello()

      def print_hello(): # <--- Does not accept an argument 
          print('hello')
      
      print_hello()    # <--- No argument is passed
      # hello
      

      另一个例子可以让你更多地了解如何将参数传递给函数。您可以定义一个包含要打印的字符串的变量,比如说to_print,然后在调用它时将其作为参数传递给您的函数。虽然解释更多细节超出了此答案的范围,但我给出的两个示例应该可以帮助您入门。更详细的可以参考官方文档here

      def print_hello(to_print): # <--- Accepts an argument 
              print(to_print)
      
      to_print = "hello"
      print_hello(to_print) # <--- Argument is passed
      # hello
      

      【讨论】:

        【解决方案4】:

        您可以使用lambda 表达式:

        print_hello = lambda: print('hello')
        

        或者一个实际的函数定义:

        def print_hello(): print('hello')
        

        functools.partial (不同之处在于您仍然可以为print 使用其他参数,而除非在定义中指定,否则您将失去该功能)

        from functools import partial
        print_hello = partial(print, 'hello')
        

        要使用这些中的任何一个:

        print_hello()
        #'hello'
        

        【讨论】:

          猜你喜欢
          • 2020-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-13
          • 2017-01-18
          • 2019-07-13
          相关资源
          最近更新 更多