我正在浏览WikiVS的一些页面,我引用了:
because lambdas in Python are restricted to expressions and cannot
contain statements
我想知道这个限制将是一个很好的例子(或更多),最好是与Ruby语言相比较.
感谢您的回答,评论和反馈!
解决方法
我不认为你真的在问lambdas,而是内联函数.
这真的是Python严重烦人的限制之一:你无法定义一个函数(一个真正的函数,而不仅仅是一个表达式)内联;你必须给它一个名字.这是非常令人沮丧的,因为其他所有现代脚本语言都是这样做的,并且必须将函数移到线外非常痛苦.这也令人沮丧,因为我觉得Python字节码可以代表这一点 – 这只是语言语法不能.
使用Javascript:
responses = { "resp1": { "start": function() { ... },"stop": function() { ... },},"resp2": { "start": function() { ... },... } responses["resp1"]["start"]();
LUA:
responses = { resp1 = { start = function() ... end; end = function() ... end; }; ... } responses.resp1.start();
ruby:
responses = { "resp1" => { "start" => lambda { },"stop" => lambda { },} responses["resp1"]["start"].call
Python:
def resp1_start(): pass def resp1_stop(): pass responses = { "resp1": { "start": resp1_start,"stop": resp1_stop,} responses["resp1"]["start"]()
请注意,JavaScript和Lua没有lambdas:它们没有理由存在,因为内联函数以更加自然和通用的方式覆盖它们.
我可能会认为这是最令人烦恼的日常Python限制.