Lisp的apply和funcall与Python的适用

pro*_*eek 1 lisp python common-lisp python-2.x

Lisp的APPLY用于调用存储在列表中的计算参数的函数.(从Rainer的注释修改)

例如,以下代码更改(列表1 2 3)到(+ 1 2 3).

(apply #'+ '(1 2 3)) 

但是,Python的应用会执行Lisp的funcall所做的工作,除了一些细微的差别(输入以元组/列表的形式给出)

(defun add (x y) (+ x y))
(funcall #'add 1 2) 
or
(funcall #'(lambda (x y) (+ x y)) 10 2)
apply(lambda x,y : x+y, [1,2])

你怎么看?Lisp的funcall和Python的应用之间是否存在更多差异?

leo*_*luk 8

有没有理由为什么Python选择名称apply not funcall?

因为它是Python,而不是LISP.不需要具有相同的名称,funcall是一个LISP命令,并且apply在Python中是不同的.

apply 在Python中不推荐使用扩展调用语法.

旧语法:

apply(foo, args, kwargs)
Run Code Online (Sandbox Code Playgroud)

新语法:

foo(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)