Lisp';s apply和funcall vs Python';s申请

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

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版以来已弃用:改为将扩展调用语法与
*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用于调用具有存储在列表中的计算参数列表的函数。