这是我的问题的一个简化例子。我认为这些函数会有完全相同的行为:
def f1(l):
if type(l[0][0])==list: f=lambda x:x[0][0]
else: f=lambda x:x[0]
l.sort(key=f,reverse=True)
def f2(l):
f=lambda x:x[0][0] if type(l[0][0])==list else lambda x:x[0]
l.sort(key=f,reverse=True)
l=[[1,2],[3,4]]
但实际上f1(l)
在f2(l)
崩溃时工作正常,只有一个例外:
IndexError: list index out of range
所以问题是为什么会这样,是否有可能使用三元运算符返回其中一个函数?你知道吗
lambda
具有lowest precedence among operators。这就是Python将该行解析为解决方法是将单个
lambda
用括号括起来:也就是说,
type(l[0][0]) == list
有点错误,isinstance(l[0][0], list)
将是最好的方法(它还处理list
的子类)。你知道吗相关问题 更多 >
编程相关推荐