Python 具有多个参数的函数列表

Python 具有多个参数的函数列表,python,Python,我试图实现一个使用不同参数调用的相同函数的列表,如下所示: def func1(num): print("{}".format(num)) fl = [func1(1),func1(2),func1(3)] for f in fl: fl() 我在说“list”对象不可调用时出错 现在,这是可行的: def func1(): print 1 def func2(): print 2 def func3(): print 3 fl = [func1

我试图实现一个使用不同参数调用的相同函数的列表,如下所示:

def func1(num):
    print("{}".format(num))

fl = [func1(1),func1(2),func1(3)]

for f in fl: 
    fl()
我在说“list”对象不可调用时出错

现在,这是可行的:

def func1():
    print 1
def func2():
    print 2
def func3():
    print 3

fl = [func1,func2,func3]

for f in fl:
   f()
我做错了什么?

使用:

在您的第一个示例中,我假设
fl()
是一个输入错误,您的意思是
f()
(因为否则您将调用一个
列表
对象,该对象不可调用)

您知道
func1(1)
正在调用函数并返回此调用的结果,因此在
res=func1(1)
中,变量
res
将是执行函数的结果。。所以,这个列表
[func1(1),func1(2),…]
是这个函数返回内容的列表。函数返回
None
,该函数不可调用,这就是代码失败的原因

您希望使用不同的参数调用函数(而不是调用函数的结果!),这正是
functools.partial
的用途。

使用:

在您的第一个示例中,我假设
fl()
是一个输入错误,您的意思是
f()
(因为否则您将调用一个
列表
对象,该对象不可调用)

您知道
func1(1)
正在调用函数并返回此调用的结果,因此在
res=func1(1)
中,变量
res
将是执行函数的结果。。所以,这个列表
[func1(1),func1(2),…]
是这个函数返回内容的列表。函数返回
None
,该函数不可调用,这就是代码失败的原因

您希望使用不同的参数调用函数(而不是调用函数的结果!),这正是
functools.partial
的用途。

源于代码:

for f in f1:
    f1()
说明:

正如您定义的
f1
As类型
list
一样,您将该变量用作函数调用。但是python希望函数名应该是
string
类型。因此得到了错误
list()类型不可调用

但当您将代码更改为:

for f in f1:
    f()
这里的
f
类型为
string
,因此python验证了该类型,因此没有从代码中抛出错误:

for f in f1:
    f1()
说明:

正如您定义的
f1
As类型
list
一样,您将该变量用作函数调用。但是python希望函数名应该是
string
类型。因此得到了错误
list()类型不可调用

但当您将代码更改为:

for f in f1:
    f()

这里的
f
string
类型,因此python验证了该类型,因此它没有抛出错误。首先,您调用
fl()
,它试图将列表作为函数调用。那不行

在Python中,将
()
放在函数之后,对函数求值并提供返回值。这意味着
fl=[func1(1)、func1(2)、func1(3)]
意味着“创建一个列表,并放置调用func1(1)、func1(2)和func1(3)的结果”

如果以后要调用该函数,则可以将参数放入列表中并遍历该列表,也可以绑定

f = func1 # storing the function as a variable
fl = [1,2,3]

for v in fl: 
    f(v)
然后可以执行类似使用lambda绑定的操作:

f = func1 # storing the function as a variable
fl = [lambda :f(1), lambda :f(2), lambda :f(3)]

for v in fl: 
    v() # v is bound to the parameters, so you don't need to use a param

首先,您正在调用
fl()
,它试图将列表作为函数调用。那不行

在Python中,将
()
放在函数之后,对函数求值并提供返回值。这意味着
fl=[func1(1)、func1(2)、func1(3)]
意味着“创建一个列表,并放置调用func1(1)、func1(2)和func1(3)的结果”

如果以后要调用该函数,则可以将参数放入列表中并遍历该列表,也可以绑定

f = func1 # storing the function as a variable
fl = [1,2,3]

for v in fl: 
    f(v)
然后可以执行类似使用lambda绑定的操作:

f = func1 # storing the function as a variable
fl = [lambda :f(1), lambda :f(2), lambda :f(3)]

for v in fl: 
    v() # v is bound to the parameters, so you don't need to use a param

你能简单地解释一下发生了什么事吗?OP似乎很难理解函数和函数输出之间的区别(OP的第一个示例中是
None
)?OP似乎很难理解函数和函数输出之间的区别(在OP的第一个示例中是
None
),这正是我需要的:)