Python 3.x Python中返回值的混淆

Python 3.x Python中返回值的混淆,python-3.x,Python 3.x,我不太熟悉Python,我在代码中遇到了如下问题,有人能帮我解释一下原因吗 def调用者1(a): 如果a

我不太熟悉Python,我在代码中遇到了如下问题,有人能帮我解释一下原因吗

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'