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

NamedTuple技巧用法的更多相关文章

  1. collections中namedtuple的用法

    我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: p = (1, 2) 但是,看到(1, 2),很难看出这个tuple是用来表示一个坐标的.这时,namedtuple就派上了用 ...

  2. #ifdef 的技巧用法

    -- int _tmain(int argc, _TCHAR* argv[]) { #ifdef DEBUG cout<<"DEBUG has been defined" ...

  3. python 命名元组(namedtuple)

      我们知道c/c++语言中,有结构体这种数据类型: struct{ string name; int age; char sex; }student; 在对结构体对象进行赋值或者取值时可以使用.运算 ...

  4. Python namedtuple(命名元组)使用实例

    Python namedtuple(命名元组)使用实例 #!/usr/bin/python3 import collections MyTupleClass = collections.namedtu ...

  5. python数据处理技巧一

    字符串赋值(传参)技巧 Python中一般的字符串赋值的方式如下: variable = "Test" print "I just [%s] unit"%var ...

  6. awk命令简单学习

    请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答). 解答: 说明:此题解答方法已经给大家讲解了不下15种,还可以有很多,在这里给大家着重讲下awk的技 ...

  7. MySQL 文章目录

    MySQL系列: MySQL CREATE TABLE语法 MySQL 复制表结构 MySQL 对比数据库表结构 MySQL 处理插入过程中的主键唯一键重复值办法 MySQL 启动原理剖析 MySQL ...

  8. BeagleBone Black教程之BeagleBone Black使用到的Linux基础

    BeagleBone Black教程之BeagleBone Black使用到的Linux基础 BeagleBone Black涉及到的Linux基础 在许多没有Linux相关经验的人看来,Linux看 ...

  9. python常用模块collections os random sys

    Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python 代码段. 把相关的代码 ...

  10. DBA学习参考绝佳资料

    原文来自:pursuer.chen 原文地址:https://www.cnblogs.com/chenmh/default.aspx?page=1 [置顶]MongoDB 文章目录 2018-02-0 ...

随机推荐

  1. [转帖]使用 Crash 工具分析 Linux dump 文件

    前言 Linux 内核(以下简称内核)是一个不与特定进程相关的功能集合,内核的代码很难轻易的在调试器中执行和跟踪.开发者认为,内核如果发生了错误,就不应该继续运行.因此内核发生错误时,它的行为通常被设 ...

  2. Mysql localhost 无法登录 root用户的处理过程

    问题说明: 前段时间同事修改密码, 但是发现修改了密码之后,外面可以连接root用户, 但是本地无法连接了. 怀疑是密码修改存在问题,需要重新进行处理 这里进行简单的描述. 问题现象 使用 mysql ...

  3. uni-app 计算属性 computed

    功能:=>大于1000用kg表示 小于1000,用g表示 计算属性 计算属性必须是有一个返回值的哦 在html写被计算的值 在computed中去直接调用哈 <view> <t ...

  4. vue3中provide和inject的使用

    1.provide 和 inject 的讲解 provide和inject可以实现嵌套组件之间进行传递数据. 这两个函数都是在setup函数中使用的. 父级组件使用provide向下进行传递数据: 子 ...

  5. 【一个经典BUG】gin框架中,异步协程使用context导致取不到数据

    bug的内容大致如下: func httpHandle(c *gin.Context) { go func(ctx Context){ v := ctx.Value("xxx") ...

  6. 【0基础学爬虫】爬虫基础之HTTP协议的基本原理介绍

    大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶.逆向相关文章,为实现从易到难全方位覆盖,特设[0基础学爬 ...

  7. 开源IM项目OpenIM单聊及万人群压测报告

    单聊压测结论: 华为云主机s3一台:8核16G内存,网络带宽10Mb,普通磁盘(非SSD) 同时在线及压测客户端数量:1万 每秒钟发送消息量:2300条: 从发送到对方接收平均消息延时:5秒 群聊压测 ...

  8. iphone(ios)不同设备的内存和游戏不闪退峰值

    ios内存限制 不同内存的苹果机型上(1G,2G,3G,4G-),游戏内存的峰值一般最高多少能保证不闪退? 一般来讲最保险的就是不超过机器总内存的50%,具体每个机型的内存限制在列出在下面. 原贴:& ...

  9. 金融领域:产业链知识图谱包括上市公司、行业和产品共3类实体,构建并形成了一个节点10w+,关系边16w的十万级别产业链图谱

    金融领域:产业链知识图谱包括上市公司.行业和产品共3类实体,构建并形成了一个节点10w+,关系边16w的十万级别产业链图谱 包括上市公司所属行业关系.行业上级关系.产品上游原材料关系.产品下游产品关系 ...

  10. 深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制

    深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM).TimeSformer无卷积视频分类方法.注意力机制 1.时间偏移模块(TSM) 视频流的爆炸性增长为以高精度和低成本执行视频理解任 ...