加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

与Ruby相比,Python的限制:lambda

发布时间:2020-12-16 21:20:09 所属栏目:百科 来源:网络整理
导读:我正在浏览WikiVS的一些页面,我引用了: because lambdas in Python are restricted to expressions and cannot contain statements 我想知道这个限制将是一个很好的例子(或更多),最好是与Ruby语言相比较. 感谢您的回答,评论和反馈! 解决方法 我不认为你真
我正在浏览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限制.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读