Mat*_*Mat 253 python tuples function
假设我有一个Python函数,它在元组中返回多个值:
def func():
return 1, 2
Run Code Online (Sandbox Code Playgroud)
是否有一种很好的方法可以忽略其中一个结果,而不仅仅是分配给一个临时变量?如果我只对第一个值感兴趣,是否有比这更好的方法:
x, temp = func()
Run Code Online (Sandbox Code Playgroud)
Luk*_*ard 553
您可以使用x = func()[0]返回第一个值,x = func()[1]返回第二个值,依此类推.
如果您想一次获得多个值,请使用类似的内容x, y = func()[2:4].
Bri*_*per 215
一个常见的约定是使用"_"作为要忽略的元组元素的变量名.例如:
def f():
return 1, 2, 3
_, _, x = f()
Run Code Online (Sandbox Code Playgroud)
小智 84
如果您使用的是Python 3,则可以在变量之前使用星号(在赋值的左侧),使其成为解包中的列表.
# Example 1: a is 1 and b is [2, 3]
a, *b = [1, 2, 3]
# Example 2: a is 1, b is [2, 3], and c is 4
a, *b, c = [1, 2, 3, 4]
# Example 3: b is [1, 2] and c is 3
*b, c = [1, 2, 3]
# Example 4: a is 1 and b is []
a, *b = [1]
Run Code Online (Sandbox Code Playgroud)
Eva*_*ark 18
记住,当你返回多个项目时,你真的会返回一个元组.所以你可以做这样的事情:
def func():
return 1, 2
print func()[0] # prints 1
print func()[1] # prints 2
Run Code Online (Sandbox Code Playgroud)
lac*_*cal 17
通常的做法是使用虚拟变量_(单个下划线),正如之前许多人所说的那样.
但是,为了避免与该变量名称的其他用法发生冲突(请参阅此响应),使用__(双下划线)作为一个一次性变量可能是更好的做法,正如ncoghlan所指出的那样.例如:
x, __ = func()
Run Code Online (Sandbox Code Playgroud)
S.L*_*ott 16
三个简单的选择.
明显
x, _ = func()
x, junk = func()
Run Code Online (Sandbox Code Playgroud)
可怕
x = func()[0]
Run Code Online (Sandbox Code Playgroud)
并且有一些方法可以用装饰器来做到这一点.
def val0( aFunc ):
def pick0( *args, **kw ):
return aFunc(*args,**kw)[0]
return pick0
func0= val0(func)
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎是最好的选择:
val1, val2, ignored1, ignored2 = some_function()
Run Code Online (Sandbox Code Playgroud)
它并不神秘或丑陋(如 func()[index] 方法),并且清楚地说明了您的目的。
如果这是一个您一直使用但总是丢弃第二个参数的函数,我认为在没有第二个返回值的情况下使用lambda.
def func():
return 1, 2
func_ = lambda: func()[0]
func_() # Prints 1
Run Code Online (Sandbox Code Playgroud)
这不是问题的直接答案。相反,它回答了这个问题:“如何从许多可能的选项中选择特定的函数输出?”。
如果您能够编写该函数(即它不在您无法修改的库中),则添加一个输入参数来指示您想要从该函数中获得什么。使其成为具有默认值的命名参数,因此在“常见情况”下您甚至不必指定它。
def fancy_function( arg1, arg2, return_type=1 ):
ret_val = None
if( 1 == return_type ):
ret_val = arg1 + arg2
elif( 2 == return_type ):
ret_val = [ arg1, arg2, arg1 * arg2 ]
else:
ret_val = ( arg1, arg2, arg1 + arg2, arg1 * arg2 )
return( ret_val )
Run Code Online (Sandbox Code Playgroud)
此方法提供有关所需输出的“高级警告”功能。因此,它可以跳过不需要的处理,只做获得所需输出所需的工作。另外,由于 Python 执行动态类型,因此返回类型可以更改。请注意该示例如何返回标量、列表或元组......无论您喜欢什么!
最好的解决方案可能是命名事物,而不是返回无意义的元组。除非返回的项目的顺序后面有逻辑。
def func():
return {'lat':1, 'lng':2}
latitude = func()['lat']
print(latitude)
Run Code Online (Sandbox Code Playgroud)
如果要添加有关返回内容的其他信息,甚至可以使用namedtuple:
from collections import namedtuple
Coordinates = namedtuple('Coordinates', ['lat', 'lng'])
def func():
return Coordinates(lat=1, lng=2)
latitude = func().lat
print(latitude)
Run Code Online (Sandbox Code Playgroud)
如果您返回的东西经常在一起,那么甚至最好为其定义一个类。
| 归档时间: |
|
| 查看次数: |
158257 次 |
| 最近记录: |