在支持它的语言中返回多个值的规范方法通常是tupling.
考虑这个简单的例子:
def f(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return (y0, y1, y2)
Run Code Online (Sandbox Code Playgroud)
但是,随着返回值的增加,这很快就会出现问题.如果您想要返回四个或五个值,该怎么办?当然,你可以保持它们的组合,但很容易忘记哪个值在哪里.在任何想要接收它们的地方解压缩它们也相当丑陋.
下一个合乎逻辑的步骤似乎是引入某种"记录符号".在python中,显而易见的方法是通过a dict.
考虑以下:
def g(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return {'y0': y0, 'y1': y1 ,'y2': y2}
Run Code Online (Sandbox Code Playgroud)
(编辑 - 要清楚,y0,y1和y2只是作为抽象标识符.正如所指出的,在实践中你会使用有意义的标识符)
现在,我们有一个机制,我们可以在其中投射返回对象的特定成员.例如,
result['y0']
Run Code Online (Sandbox Code Playgroud)
但是,还有另一种选择.我们可以返回一个专门的结构.我已经在Python的上下文中对此进行了构建,但我确信它也适用于其他语言.事实上,如果你在C工作,这可能是你唯一的选择.开始:
class ReturnValue:
def __init__(self, y0, y1, y2):
self.y0 = y0
self.y1 = y1
self.y2 = y2
def …Run Code Online (Sandbox Code Playgroud) 我想从两个单独的变量中的函数返回两个值.例如:
def select_choice():
loop = 1
row = 0
while loop == 1:
print('''Choose from the following options?:
1. Row 1
2. Row 2
3. Row 3''')
row = int(input("Which row would you like to move the card from?: "))
if row == 1:
i = 2
card = list_a[-1]
elif row == 2:
i = 1
card = list_b[-1]
elif row == 3:
i = 0
card = list_c[-1]
return i
return card
Run Code Online (Sandbox Code Playgroud)
我希望能够分别使用这些值.当我尝试使用时return i, card,它返回一个tuple …
在python中,您可以让函数返回多个值.这是一个人为的例子:
def divide(x, y):
quotient = x/y
remainder = x % y
return quotient, remainder
(q, r) = divide(22, 7)
Run Code Online (Sandbox Code Playgroud)
这似乎非常有用,但看起来它也可能被滥用("嗯......功能X已经计算出我们需要的中间值.让我们让X返回那个值").
你什么时候画线并定义一个不同的方法?
如何从Python中的函数返回多个变量?
我正在研究验证功能.我理解异常用于错误和意外情况,但在验证函数的情况下,如果内部不满足条件,我希望它返回False而不是异常.
问题是在验证结束后,我需要用以下消息引发一个消息窗口:"Tool exited because X condition not met".我的工作流程是返回带有结果和消息的元组:
(True, Y_message)
Run Code Online (Sandbox Code Playgroud)
或(假,X_condition_not_met)
然后:
a, b = result
if not a:
raise_window(message=b)
Run Code Online (Sandbox Code Playgroud)
然而,最近我偶然发现多个答案引发了关于这个问题的争议,我很困惑.例如,有些人说要总是使用异常:从Python中的函数返回多个值的最佳方法是什么?和其他人说元组是最好的方法在python中获得错误与成功的返回值.
如果有人能指出我正确的方向,我将不胜感激.
python ×5
function ×3
return-value ×3
return ×2
coding-style ×1
exception ×1
list ×1
tuples ×1