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

时间:2016-11-17 00:24:16

标签: python python-2.7 python-3.x apply

将Atom视为

的类
  • form.name是一个字符串
  • 转换返回值列表

以下两行有什么区别?

  • 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(object [,args [,kwargs]]) - >值
      使用从元组args中获取的位置参数调用可调用对象,       和从可选字典kwargs中获取的关键字参数。       请注意,类是可调用的,具有调用()方法的实例也是如此。

我无法理解两条线之间的区别。我试图在Python 3.5中找到apply(Atom, [form.name] + list([convert(arg, subst) for arg in list(form.args)]))的等效代码

1 个答案:

答案 0 :(得分:5)

applyunpacking arguments的老派 1 方式。换句话说,以下所有结果都会产生相同的结果:

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

由于您在apply不再存在的python3.5中工作,因此该选项无效。此外,您将参数作为列表使用,因此您也无法使用第三个选项。剩下的唯一选择是第二个选项。我们可以很容易地将您的表达式转换为该格式。 python3.5中的等价物是:

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

1 在python2.3中弃用了它!