Python 多返回值函数如何无需临时变量一行提取单个返回值赋值
错误原因
Python 函数返回多个值时,会默认将多个值打包为*元组(tuple)*类型返回:
- 元组是有序序列结构,不存在自定义属性,因此无法通过
.属性名的方式取值,会触发AttributeError - 元组仅支持整数下标或切片索引,不支持字符串作为索引,因此用
['eligibleAgreements']取值会触发TypeError
正确实现方案
方案1:序列解包(最推荐,可读性最高)
直接在一行内完成多返回值接收,不需要的第二个返回值用Python通用占位符_接收即可:
eligibleAgreements, _ = getEligibleAndActiveAgreements(username)
方案2:直接按下标取值
由于eligibleAgreements是函数返回的第一个值,对应元组的下标为0,直接按索引取值即可:
agreements = getEligibleAndActiveAgreements(username)[0]
可选扩展(支持属性名取值)
如果你后续希望可以直接通过.eligibleAgreements的方式取值,无需记忆下标,可以修改原函数的返回类型,比如使用namedtuple封装返回结果:
from collections import namedtuple # 定义返回结果结构 AgreementResult = namedtuple('AgreementResult', ['eligibleAgreements', 'activeAgreements']) def getEligibleAndActiveAgreements(username): # 原有逻辑不变 eligibleAgreements = ... activeAgreements = ... # 改为返回封装后的namedtuple对象 return AgreementResult(eligibleAgreements, activeAgreements)
修改后你原本的点调用写法就可以正常运行了。
内容的提问来源于stack exchange,提问作者gene b.
相关产品推荐
相关产品推荐

