“我正在用python创建函数列表,但是当我运行该程序时,列表中的所有函数都会被自动调用。”
“我已经在python 3.7.3上进行了尝试,并且在C ++中也尝试了相同的概念,但是在这里也做了相同的工作。”
none
“我希望aa [1]的输出为'b',但是在输出中所有函数都会被调用,并给出输出 一种 b C d 没有 “
答案 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语句。另外,当一个函数没有显式返回值时,它将返回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
,则列表中的每个元素将包含每个函数返回的值 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()
语句。