bestrivennan
龙.吟
采纳率50%
2020-04-15 14:37

这两个lambda表达式有什么不同吗

已采纳
lambda x=str(item[1][0]): open_url(x)
lambda:open_url(str(item[1][0]))

编程中遇到了问题,改变这一点之后解决了,希望大佬能讲解一下

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • qq_46523755 正在学C++ 1年前

    用例子来说话(Jupyter下运行):

    item = [6,5,4,3,2,1,0]
    def pri(x):
        return x+'||'+x
    func = lambda x=str(item[1]): pri(x)   # 匿名函数拥有一个默认参数str(item[1]),匿名函数的输出是调用pri函数
    print(func)  # 表明func是一个函数
    print(func())       # 调用这个匿名函数时,如果不给出参数,就使用默认参数str(item[1]),然后调用pri函数
    print(func('aaa'))  # 调用这个匿名函数时,如果给出参数,  就使用给出的参数,          然后调用pri函数
    func
    
    结果:
    <function <lambda> at 0x000001891DC296A8>
    5||5
    aaa||aaa
    <function __main__.<lambda>(x='5')>
    

    继续:

    func = lambda:pri(str(item[1]))  # 匿名函数没有参数,函数的输出已经固定
    print(func)
    print(func())
    print(func('aaa'))    # 报错
    
    结果:
    <function <lambda> at 0x000001891DC299D8>
    5||5
    TypeError: <lambda>() takes 0 positional arguments but 1 was given
    

    这个时候我们看第二个func

    func
    
    结果:
    <function __main__.<lambda>()>
    

    很明显,结果表明,第一个lambda带有一个默认参数,第二个lambda没有参数且输出已经固定

    如果帮到你,请采纳以鼓励。

    点赞 2 评论 复制链接分享

相关推荐