Lisp';s apply和funcall vs Python';s申请
Lisp的APPLY用于调用具有存储在列表中的计算参数的函数 例如,以下代码将(列表1 2 3)更改为(+1 2 3) (应用#'+'(1 2 3)) 然而,Python的apply和Lisp的funcall一样,只是有一些细微的区别(输入以元组/列表的形式给出) (defun加上(xy)(+xy)) (funcall#'加1 2) 或 (funcall#’(lambda(xy)(+xy))102) 应用(λx,y:x+y[1,2]) 你觉得怎么样?Lisp的funcall和Python的apply之间有更多的区别吗 自2.3版以来已弃用:改为将扩展调用语法与Lisp';s apply和funcall vs Python';s申请,python,lisp,common-lisp,python-2.x,Python,Lisp,Common Lisp,Python 2.x,Lisp的APPLY用于调用具有存储在列表中的计算参数的函数 例如,以下代码将(列表1 2 3)更改为(+1 2 3) (应用#'+'(1 2 3)) 然而,Python的apply和Lisp的funcall一样,只是有一些细微的区别(输入以元组/列表的形式给出) (defun加上(xy)(+xy)) (funcall#'加1 2) 或 (funcall#’(lambda(xy)(+xy))102) 应用(λx,y:x+y[1,2]) 你觉得怎么样?Lisp的funcall和Python的app
*args
和**关键字一起使用
在py3k中删除。:
自2.3版以来已弃用:改为将扩展调用语法与*args
和**关键字一起使用
在py3k中移除
Python选择apply not funcall这个名称有什么原因吗
因为它是Python,不是LISP。不需要使用相同的名称,funcall
是一个LISP命令,apply
在Python中有所不同
apply
在Python中不推荐使用,请使用扩展调用语法
旧语法:
apply(foo, args, kwargs)
新语法:
foo(*args, **kwargs)
Python选择apply not funcall这个名称有什么原因吗
因为它是Python,不是LISP。不需要使用相同的名称,funcall
是一个LISP命令,apply
在Python中有所不同
apply
在Python中不推荐使用,请使用扩展调用语法
旧语法:
apply(foo, args, kwargs)
新语法:
foo(*args, **kwargs)
我不明白你为什么声称Lisp的apply()
与Python有什么不同。这两个函数都接受一个函数和一个列表,然后使用列表元素作为参数调用该函数。((+1 2 3)
是用参数1
、2
和3
调用+
,不是吗?)在我看来,这两个应用
做的事情完全一样
另一方面,funcall
讲述一个函数和几个单独的参数(不是包含参数的列表),并将该函数应用于这些参数。我不明白为什么您会声称Lisp的apply()
与Python的有所不同。这两个函数都接受一个函数和一个列表,然后使用列表元素作为参数调用该函数。((+1 2 3)
是用参数1
、2
和3
调用+
,不是吗?)在我看来,这两个应用
做的事情完全一样
另一方面,funcall
讲述一个函数和几个独立的参数(不是包含参数的列表),并将函数应用于这些参数。在常见的Lisp中(funcall#fun 1(列表2 3 4))
与(fun 1(列表2 3 4))
,而(apply#fun 1(列表2 3 4))
将根据乐趣的不同而有不同的含义
* (defun bleargh (a &rest b) (cons a b))
BLEARGH
* (funcall #'bleargh 1 (list 1 2 3))
(1 (1 2 3))
* (apply #'bleargh 1 (list 1 2 3))
(1 1 2 3)
所以FUNCALL和APPLY做的事情是完全不同的。在公共Lisp中(FUNCALL#fun 1(list 2 3 4))
与(fun 1(list 2 3 4))
,而(APPLY#fun 1(list 2 3 4))
根据乐趣的不同,意味着不同的事情
* (defun bleargh (a &rest b) (cons a b))
BLEARGH
* (funcall #'bleargh 1 (list 1 2 3))
(1 (1 2 3))
* (apply #'bleargh 1 (list 1 2 3))
(1 1 2 3)
所以FUNCALL和APPLY做的事情是完全不同的。Lisp和Python的APPLY函数做的事情是一样的——给定一个函数f和一组参数p,将f应用到p。唯一的区别是Python的apply还接受关键字参数的字典。在Lisp中,这些参数将作为:关键字参数包含在参数列表中。Lisp和Python的apply函数都做相同的事情——给定一个函数f和一个参数列表p,将f应用到p。唯一的区别是Python的apply还接受关键字参数的字典。在Lisp中,这些参数将作为:关键字
参数包含在参数列表中。注意,您也可以执行操作符。添加(*[1,2])
而不是1+2
。混淆太多?不,Lisp的APPLY不是用来替换列表中的第一个元素的。Lisp的APPLY用于调用具有存储在列表中的计算参数列表的函数。请注意,您也可以执行操作符。添加(*[1,2])
而不是1+2
。混淆太多?不,Lisp的APPLY不是用来替换列表中的第一个元素的。Lisp的APPLY用于调用具有存储在列表中的计算参数列表的函数。