Python 单行返回条件
这是我的密码:Python 单行返回条件,python,return,conditional-statements,Python,Return,Conditional Statements,这是我的密码: d = {'key1':1,'key2':5} def pop1(d): return d.pop('key2') if len(d) > 1 else d def pop2(d): if len(d) > 1: d.pop('key2') return d def test(a): return a, len(a) pop2工作正常: print test(pop2(d)) ({'key1': 1}, 1) pop1没有:
d = {'key1':1,'key2':5}
def pop1(d):
return d.pop('key2') if len(d) > 1 else d
def pop2(d):
if len(d) > 1: d.pop('key2')
return d
def test(a):
return a, len(a)
pop2工作正常:
print test(pop2(d))
({'key1': 1}, 1)
pop1没有:
print test(pop1(d))
TypeError: object of type 'int' has no len()
我错过了什么?是关于pop()函数还是单行条件?当您执行以下操作时:
print test(pop1(d))
pop1(d)
将返回5
所以,把你的陈述打印出来(测试(5))
len(5)
-->5不是字符串,因此您将得到一个错误。当您执行以下操作时:
print test(pop1(d))
pop1(d)
将返回5
所以,把你的陈述打印出来(测试(5))
len(5)
-->5不是字符串,因此您将得到一个错误。如果我们分析以下返回语句:
d.pop('key2') if len(d) > 1 else d
我们看到,当字典的长度小于1
时,只返回字典。这里的情况并非如此,因此当len(d)
是>1
时,我们感兴趣
在这种情况下,将返回d.pop('key2')
。从中,我们可以看到.pop
方法将:
如果键在字典中,请将其删除并返回其值
…因此pop1
将返回'key2'
的值,即5
这会导致在对其调用len()
时出错,因为5
是一个整数
错误说明了这一点:
TypeError:类型为“int”的对象没有len()
为什么
pop2()
起作用
这个函数不使用三元数来决定是返回值还是返回整个字典,相反,我们总是返回字典
这意味着总是可以调用
len()
,并且它可以按预期工作。如果我们分析以下返回语句:
d.pop('key2') if len(d) > 1 else d
我们看到,当字典的长度小于1
时,只返回字典。这里的情况并非如此,因此当len(d)
是>1
时,我们感兴趣
在这种情况下,将返回d.pop('key2')
。从中,我们可以看到.pop
方法将:
如果键在字典中,请将其删除并返回其值
…因此pop1
将返回'key2'
的值,即5
这会导致在对其调用len()
时出错,因为5
是一个整数
错误说明了这一点:
TypeError:类型为“int”的对象没有len()
为什么
pop2()
起作用
这个函数不使用三元数来决定是返回值还是返回整个字典,相反,我们总是返回字典
这意味着总是可以调用
len()
,并按预期工作。d.pop
将返回其他内容,而不是d
本身。pop1
返回弹出的值(如果弹出了任何内容)pop2
始终返回字典d
。请参见:d.pop
将返回其他内容,但不会返回d
本身。pop1
返回弹出值(如果弹出任何内容)pop2
始终返回字典d
。请参见以下内容: