首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >忽略python多个返回值

忽略python多个返回值
EN

Stack Overflow用户
提问于 2009-01-10 22:12:49
回答 11查看 249.8K关注 0票数 344

假设我有一个Python函数,它在一个元组中返回多个值:

代码语言:javascript
运行
复制
def func():
    return 1, 2

有没有一种好的方法可以忽略其中一个结果,而不是只给一个临时变量赋值?假设我只对第一个值感兴趣,有没有比这更好的方法:

代码语言:javascript
运行
复制
x, temp = func()
EN

Stack Overflow用户

发布于 2018-02-23 00:34:18

最好的解决方案可能是命名对象,而不是返回无意义的元组(除非返回项的顺序背后有某种逻辑)。例如,您可以使用字典:

代码语言:javascript
运行
复制
def func():
    return {'lat': 1, 'lng': 2}
    
latitude = func()['lat']

如果您想要添加有关所返回内容的额外信息,甚至可以使用namedtuple (它不仅仅是一个字典,它是一对坐标):

代码语言:javascript
运行
复制
from collections import namedtuple 

Coordinates = namedtuple('Coordinates', ['lat', 'lng'])

def func():
    return Coordinates(lat=1, lng=2)

latitude = func().lat

如果您的字典/元组中的对象紧密绑定在一起,那么甚至为其定义一个类可能是一个好主意。这样,您还可以定义更复杂的操作。接下来的一个自然问题是:When should I be using classes in Python?

大多数最新版本的python (≥3.7)都有dataclasses,您可以使用它来定义只需很少代码行的类:

代码语言:javascript
运行
复制
from dataclasses import dataclass

@dataclass
class Coordinates:
    lat: float = 0
    lng: float = 0

def func():
    return Coordinates(lat=1, lng=2)

latitude = func().lat

与命名元组相比,数据类的主要优势是它更容易扩展,但也有other differences。请注意,默认情况下,数据类是可变的,但您可以使用@dataclass(frozen=True)而不是@dataclass来强制它们不可变。

Here is a video,它可能会帮助您为您的用例选择正确的数据类。

票数 15
EN
查看全部 11 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/431866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档