首页 > 其他分享 >NamedTuple技巧用法

NamedTuple技巧用法

时间:2022-09-06 13:22:51浏览次数:87  
标签:province NamedTuple 技巧 city country latlon 用法 address

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

标签:province,NamedTuple,技巧,city,country,latlon,用法,address
From: https://www.cnblogs.com/weiweivip666/p/16661421.html

相关文章

  • new Set()的基础用法(ES6)
    1、什么是Set()Set是es6新增的数据结构,似于数组,但它的一大特性就是所有元素都是唯一的,没有重复的值,我们一般称为集合。Set本身是一个构造函数,用来生成Set数据结构2、......
  • c++STL用法总结
    一、vector的用法vectorvet;1、排序:sort(vet.begin(),vet.end()),时间复杂度O(nlogn)2、查找:if(find(vet.begin(),vet.end(),x)!=vet.end()),时间复杂度O(n)......
  • Vue.$set的用法
    向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因为Vue无法探测普通的新增属性(比如this.myObject.n......
  • 基于 API 的项目开发的一些技巧和窍门
    基于API的项目开发的一些技巧和窍门Lightmyway我将从一个对任何开发人员来说都很烦人的故事开始。我上周开始开发我的新的基于API的项目,首先,我花了大约6个小时......
  • mysqldump的简单用法
    1.单个数据库备份,必须在系统命令行环境运行mysqldump-uusername–ppassword--default-character-set=utf8databasename>dumpfile-u用户名,有空格;-p后面是数据库密......
  • Java 使用技巧-如何抛出一个异常并捕获它
    工作中需要使用Java编写插件,但并不是主要技术栈,所以简单地学习记录一下。背景与Javascript不同,Java中类型的概念非常强,函数中不能返回与声明不同类型的返回值。例如下面......
  • three.js基础用法
    import*asTHREEfrom'../libs/build/three.module.js';import{OrbitControls}from'../libs/jsm/controls/OrbitControls.js'import{CSS2DRenderer,CSS2DObje......
  • 日常开发记录-前端浏览器高级调试技巧整理
    1. 一键重新发起请求场景:在和后端联调时用的比较多,快速的重发请求,不用再在页面上点击步骤:选中“Network” 点击Fetch/XHR选择要重新发送的请求(鼠标点击一下)右......
  • C++中#ifdef和#endif的用法
    一般情况下,源程序中所有的代码都会参与编译。但有时希望对其中一部分内容只在满足一定条件时才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。条件编......
  • [javascript]document的open() write() close()用法
    1、document.open()作用:打开一个新文档,即打开一个流,并擦除当前文档的内容。执行完后会打开一个空的html文档语法:document.open(mimetype,replace)参数:mimetype:可选。......