为什么要搞一个额外的lambda,使用def定义匿名函数不就可以了吗?

为什么要搞一个额外的lambda,使用def定义匿名函数不就可以了吗?

感觉lamda的语法挺怪的:

[Copy to clipboard] [ - ]
CODE:
def sigma(func):
    sum = 0
    for i in range(3):
        sum += func(i)
    return sum

print sigma(lambda x: x + x)

为什么不能使用def定义匿名函数了,这样就统一了,如下所示:

[Copy to clipboard] [ - ]
CODE:
def sigma(func):
    sum = 0
    for i in range(3):
        sum += func(i)
    return sum

print sigma(def(x): x + x)

lambda实际上是生成一个函数对象!
我觉得lambda挺好的啊 你要写个简单的方法 一句话用lambda挺不错的啊
它是从函数式语言来的,只用来生成非常简单的函数。主要是动态生成。
也许是我没表达清楚,让楼上几位朋友误解我的意思了,我的意思是,为什么不能使用def定义匿名函数,这样在形式上就统一了, 比如在javascript中,可以使用funcion定义普通的函数也可以定义匿名函数,并没有引入新的关键字。

而且,使用lambda定义的匿名函数中只能是一个表达式,限制太严重了,在需要大量回调函数的场合时显的很繁琐。
就是匿名函数,只用于简单的地方,但是又需要函数的地方。
print sigma(def(x): x + x)

能这样的话,就棒极了!
问题有两点:一是 def 没有返回值,不像 javascript 的 function 关键字,二是现在的函数定义语法不允许没有函数名。
是的,javascript中可以,但是这里不行,不同的语言不一样,没什么好比较的。另外你给的例子不能运行



>>> def sigma(func):
...     sum = 0
...     for i in range(3):
...         sum += func(i)
...     return sum
...
>>> print sigma(def(x): x + x)
  File "<stdin>", line 1
    print sigma(def(x): x + x)
                  ^
SyntaxError: invalid syntax
>>>


QUOTE:
原帖由 limodou 于 2008-6-26 15:23 发表
就是匿名函数,只用于简单的地方,但是又需要函数的地方。

举一个简单又需要函数的实际例子,我初学lambda时碰到的,在遍历列表时回调某个函数,一个常见的应用场景,非得引入一个print_wrapper才行:

[Copy to clipboard] [ - ]
CODE:
def each(func):
    for i in range(3):
        func(i)

def print_wrapper(x):
    print x

each(lambda x: print_wrapper(x))

由于print是语句,以下的例子是不行的:

[Copy to clipboard] [ - ]
CODE:
def each(func):
    for i in range(3):
        func(i)

each(lambda x:  print x)

开始时我还试过这样的代码:

[Copy to clipboard] [ - ]
CODE:
def each(func):
    for i in range(3):
        func(i)

each(def(x):  print x)



QUOTE:
原帖由 lanphaday 于 2008-6-26 15:24 发表
print sigma(def(x): x + x)

能这样的话,就棒极了!
问题有两点:一是 def 没有返回值,不像 javascript 的 function 关键字,二是现在的函数定义语法不允许没有函数名。

原来你就是赖咏浩啊,看过你很多csdn的python文章啊,写的不错啊,支持原创!