将Atom视为
的类以下两行有什么区别?
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)]))
的等效代码
答案 0 :(得分:5)
apply
是unpacking 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中弃用了它!