【问题标题】:Automatic running of functions in python? [duplicate]在python中自动运行函数? [复制]
【发布时间】:2019-10-27 06:31:12
【问题描述】:

“我在 python 中创建一个函数列表,但是当我运行程序时,列表中的所有函数都会被自动调用。”

“我已经在 python 3.7.3 上尝试过,同样的概念我也在 C++ 中尝试过,但它也做了同样的事情。”

    def a():
        print ('a')
    def b():
        print('b')
    def c():
        print('c')
    def d():
        print('d')
    aa=[a(),b(),c(),d()]
    print(aa[1])

“我希望 aa[1] 的输出是 'b',但是在输出中所有函数都被调用并给出了输出 一种 b C d 没有 "

【问题讨论】:

  • 你的函数没有返回任何东西。
  • 将您的 print(#) 更改为 return #
  • 你在这里显式调用你的所有函数:aa=[a(),b(),c(),d()].
  • 您的函数正在运行,但不是自动运行;您在定义aa 的表达式中显式调用它们。问题是您将标准输出与函数调用的值混淆了。
  • 查看这个可爱的debug 博客寻求帮助。还可以尝试阅读有关函数调用的教程。这些应该有助于解决您的一些问题,并将混淆减少到您可以处理的一两点。

标签: python function


【解决方案1】:

使用return 代替print。当您创建列表aa 时,每个元素都会被立即调用,因为您已经在每个元素之后编写了() - 因此每个打印语句都会在您的列表构建时运行。此外,当函数没有显式返回值时,它会返回None。当您print(aa[1]) 时,您将打印 b() 的返回值,即 None。所以你得到了:

a     # because it's printed in a()
b     # because it's printed in b()
c     # because it's printed in c()
d     # because it's printed in d()
None  # because it's returned from b()

如果您在每个函数中使用return 而不是print,则列表的每个元素将包含每个函数返回 的值(您的列表实际上将变为aa = ['a', 'b', 'c', 'd'])。然后,当您随后 print(aa[1]) 时,您将在位置 1 打印 aa 的值,即 'b'

def a():
    return 'a'
def b():
    return 'b'
def c(): 
    return 'c' 
def d():
    return 'd'
aa=[a(),b(),c(),d()] 
print(aa[1])

或者,如果您想在每个函数中保留打印语句,您可以使用 references 为每个函数构建列表,而不是调用每个函数 - 然后运行结果:

def a():
    print ('a')
def b():
    print('b')
def c():
    print('c')
def d():
    print('d')
aa=[a,b,c,d]
print(aa[1]())

通过将() 放在aa[1] 之后,您的意思是,尝试运行从aa[1] 返回的任何内容。由于aa[1] 包含对函数b引用,因此此时您实际上是在调用b(),然后它将运行您的print('b') 语句。

【讨论】:

    【解决方案2】:

    您的函数不返回任何内容。他们只打印一个字母并返回 None。

    使用

    def a():
        print ('a')
        return 'a'
    
    ...
    

    改为

    【讨论】:

      【解决方案3】:

      您在编写时显式调用了所有函数 [A B C D()] 所以他们都在运行(在这种情况下打印一封信)确实是预期的输出。 我相信您想要的是首先不调用它们来收集列表中的可调用对象。如果您希望该列表中的所需函数通过索引运行,您可以通过仅在之后调用来实现。

      例如,

      def a():
          print ('a')
      def b():
          print('b')
      def c():
          print('c')
      def d():
          print('d')
      
      # placeholder for the functions
      funcs = [a, b, c, d]
      

      然后就可以通过索引调用任意函数了:

      # call any of them by indexing whenever you feel like it.
      funcs[1]()
      
      Output: b
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-08
        • 1970-01-01
        • 2015-03-23
        • 1970-01-01
        • 1970-01-01
        • 2017-12-02
        • 2021-12-30
        相关资源
        最近更新 更多