Python 3.x Python中返回值的混淆
我不太熟悉Python,我在代码中遇到了如下问题,有人能帮我解释一下原因吗Python 3.x Python中返回值的混淆,python-3.x,Python 3.x,我不太熟悉Python,我在代码中遇到了如下问题,有人能帮我解释一下原因吗 def调用者1(a): 如果a
def调用者1(a):
如果a<11,则返回“a”,否则返回“a”、“b”
打印(被叫方1(a=5))
def呼叫者2(a):
如果a<11:
返回“a”
其他:
返回“a”、“b”
打印(被叫方2(a=5))
c=被叫方2(a=5)
印刷品(c)
对于调用者1,我希望输出'a',但打印'a','b') 对于调用者,2将打印“a”,但最终打印('a','b')(至少在每次调试中都会显示('a','b')结果,“a”和('a','b')都将打印出来) 为什么会发生这种情况?结果:调用者1函数的输出是('a','b'),而不是a 原因:排队
return 'a' if a < 11 else 'a', 'b'
如果a<11,则返回“a”,否则返回“a”、“b”
Else条件只包含“a”,而不包含“a”、“b”b'与if/else条件用逗号分隔
因此,函数返回'a'(a<11为真)后接'b'
解决方案:替换为下线,以达到预期效果
return 'a' if a < 11 else ('a', 'b')
如果a<11,则返回'a'('a','b')
如果a<11 else,则返回'a','b'
可以写成如果a<11 else('a','b'),则返回'a'
,如果它使调用方的更加清晰,“…但最终打印出('a','b')”。不会的。它只打印在控制台中运行的'a'
@Austin,您会看到'a',但是如果有使用返回值的上下文,它们会显示'a'和('a','b'),我的问题是调用者1和调用者2正在做相同的事情为什么会有不同的结果,您注意到了吗?“对于调用者1,我希望输出'a'”为什么?你认为'b'
会发生什么情况?@Wilson这两者并不等同。三元if
的绑定强度大于,
caller1
执行('a'如果a<11,则执行'a'),'b'
。