0
点赞
收藏
分享

微信扫一扫

NamedTuple技巧用法

PS: 第一眼看到这个代码的时候,就联想到了go中的构造函数,虽然知道go中的构造函数其实就类比于python中的构造函数__init__,但是不得不说,这个太像了

在日常编码中,我们经常需要写一些返回多个值的函数。举个例子,下面这个地理位置相关的函数
用python的标准做法返回了多个结果:

def latlon_to_address(lat, lon):
return country, province, city

country, province, city = latlon_to_address(lat, lon)

但是有一天,产品需求变了,除了国家、省份和城市,调用方还需要用到一个新的位置信息:“城区”(district)。
因此latlon_to_address()函数得增加一个新的返回值,返回4个结果:country、province、city、district

修改函数的返回结果后,为了保证兼容,你还需要找到所有调用latlon_to_address()的地方,补上多出来的district变量,
否则代码就会报错
但以上这些为了保证兼容性的批量修改,其实原本可以避免
对于这种未来可能会变动的多返回值函数来说,如果一开始就使用NamedTuple类型对返回结果进行建模,上面的改动会变得简单许多

from typing import NamedTuple

class Address(NamedTuple):
country: str
province: str
city: str

def lation_to_address(lat, lon):
return Address(
country=country,
province=province,
city=city,
)

addr = latlon_to_address(lat, lon)
# 后续可以通过属性名来使用addr
# addr.country / addr.province

-------------------------------------------

个性签名:代码过万,键盘敲烂!!!


举报

相关推荐

0 条评论