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

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

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

用例子来说话(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没有参数且输出已经固定

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