关于python:apply()函数和使用类对象的函数调用有什么区别?

What is the difference between the apply() function and a function call using the object of the class?

认为Atom是一个类,其中

  • form.name是一个字符串
  • convert返回值列表

以下两行有什么区别?

  • apply(Atom, [form.name] + list([convert(arg, subst) for arg in
    list(form.args)]))

  • Atom(form.name, [convert(arg, subst) for arg in form.args])

从文档中,

apply(...)
apply(object[, args[, kwargs]]) -> value
Call a callable object with positional arguments taken from the tuple args,
and keyword arguments taken from the optional dictionary kwargs.
Note that classes are callable, as are instances with a call() method.

我不明白这两行的区别。我正在尝试在python 3.5中为apply(Atom, [form.name] + list([convert(arg, subst) for arg in list(form.args)]))找到一个等价的代码。


apply是一种古老的解包论点的方法。换言之,以下所有结果都相同:

1
2
3
results = apply(foo, [1, 2, 3])
results = foo(*[1, 2, 3])
results = foo(1, 2, 3)

由于您在python3.5工作,其中apply不再存在,因此该选项无效。另外,您将参数作为一个列表来处理,因此您也不能真正使用第三个选项。剩下的唯一选择就是第二个。我们可以很容易地将您的表达式转换为这种格式。python3.5中的等效值为:

1
Atom(*([form.name] + [convert(arg, subst) for arg in list(form.args)]))

1在python2.3中已弃用它!