"lambda : print 'Hello'"为何不对?

"lambda : print 'Hello'"为何不对?



[Copy to clipboard] [ - ]
CODE:
lambda : print 'Hello'



[Copy to clipboard] [ - ]
CODE:
    lambda : print 'Hello'
                 ^
SyntaxError: invalid syntax

请问是为什么?
lambda defines a function

print (lambda x: x)("str")
lambda 函数不能包含命令
为什么不能包含命令呢?很不解。
它是一个匿名函数,就是这样规定的,函数体只能是一个表达式。
不过有的时候觉得不爽,比如有想这样:

[Copy to clipboard] [ - ]
CODE:
map(lambda w: print w, objs)

把列表内所有的东西一行打印一个出来,结果发现lambda有问题。
这样就更不对了。map中的函数是对每个列表项的一个处理。你如果只打印的话,它是无法返回一个合适的结果的。如果想打印为什么不这样:

[Copy to clipboard] [ - ]
CODE:
print '\n'.join(s)

没有返回结果应该返回空值列表啊,我只需要map的操作:

[Copy to clipboard] [ - ]
CODE:
map(lambda w: sys.stdout.write(str(w)+'\n'), s)

如果是

[Copy to clipboard] [ - ]
CODE:
print '\n'.join(s)

那需要s的成员都是str都行吧?而且如果列表是空的也会打印出一行吧?
问题是lambda中不能有打印语句,你再怎么希望它也是不行。
lambda是起源于函数式编程的, python希望它的 函数式编程 的几个操作是 纯粹的, 所以,像lambda, map, reduce, filter这些操作都是 无副作用的, 即纯粹的“函数”。