Python 从函数输出值的变量列表
我有一个函数,它返回一个变量值列表,我知道可以使用元组来实现这一点。要分配这些变量,您可以执行类似于a,b=func。。。但是,如果只返回一个值,则必须执行,=func。。[注意,]而不是a=func。。。为了实现后者,您可以包括一个测试,以查看是否有一个或多个值要返回,请参见下面的示例,但我想知道是否没有更简单或更详细的方法来执行此操作Python 从函数输出值的变量列表,python,Python,我有一个函数,它返回一个变量值列表,我知道可以使用元组来实现这一点。要分配这些变量,您可以执行类似于a,b=func。。。但是,如果只返回一个值,则必须执行,=func。。[注意,]而不是a=func。。。为了实现后者,您可以包括一个测试,以查看是否有一个或多个值要返回,请参见下面的示例,但我想知道是否没有更简单或更详细的方法来执行此操作 def foo(*args): returnvalues = [] for arg in args: arg += 100
def foo(*args):
returnvalues = []
for arg in args:
arg += 100
returnvalues.append(arg)
if len(returnvalues) == 1:
return returnvalues[0]
else:
return tuple(returnvalues)
def baz(*args):
returnvalues = []
for arg in args:
arg += 100
returnvalues.append(arg)
return tuple(returnvalues)
a = foo(10)
b, c = foo(20, 30)
print(f'a={a}, b={b}, c={c}')
a, = baz(10)
b, c = baz(20, 30)
print(f'a={a}, b={b}, c={c}')
#
a=110, b=120, c=130
a=110, b=120, c=130
您可以将此类函数的返回值指定给单个变量,以便将其用作列表或元组:
a = baz(10, 20, 30)
print(', '.join(map(str, a))) # this outputs 110, 120, 130
我相信你指的是元组解包。也称为破坏性分配。tuple这个词有点用词不当,因为您可以使用任何iterable/迭代器。因此,返回一个列表是可以的
def f():
return [1]
(a,) = f()
b, = f()
您还可以在左侧使用列表语法。生成的字节码没有区别。在b的情况下,解包单个项目看起来不像是语法错误,而且比a稍微简单一些
在只传递一个参数的特殊情况下,我将避免返回值本身而不是列表。原因是它使代码更难以通用方式使用。函数的任何调用方都需要知道它传递了多少个参数,或者检查返回值,这很笨拙。例如:
result = f()
if isinstance(result, (list, tuple)):
smallest = min(result)
else:
smallest = result
# as opposed to this when you always return a list / tuple
smallest = min(f())
如果你有一个未知长度的列表,那么首先把它分配给各个变量是没有意义的,不是吗?看看这个
result = f()
if isinstance(result, (list, tuple)):
smallest = min(result)
else:
smallest = result
# as opposed to this when you always return a list / tuple
smallest = min(f())