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
。请参见以下内容: