在python中自动运行功能?

时间:2019-06-12 17:14:31

标签: python function

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

“我已经在python 3.7.3上进行了尝试,并且在C ++中也尝试了相同的概念,但是在这里也做了相同的工作。”

none

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

3 个答案:

答案 0 :(得分:1)

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

使用

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

...

代替

答案 1 :(得分:1)

您在编写时明确调用了所有函数 [A B C D()] 因此所有它们都在运行(在本例中为打印字母)确实是预期的输出。 我相信您想要的是首先不调用它们将其收集在列表中。如果您希望然后通过索引运行该列表中的所需函数,则可以仅在事后调用。

例如,

paket update

然后您可以通过索引来调用任何函数:

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]

答案 2 :(得分:1)

使用return代替print。创建列表aa时,每个元素都会被立即调用,因为您在每个元素之后都写了()-因此,在构建列表时将运行每个print语句。另外,当一个函数没有显式返回值时,它将返回Noneprint(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,则列表中的每个元素将包含每个函数返回的值 return (您的列表将有效地变成{ {1}})。然后,当您然后aa = ['a', 'b', 'c', 'd']时,将在位置1打印print(aa[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])

通过将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()语句。