Python早期设计与开发 主要数据类型有哪些?
本系列文章译自Python之父 Guido van Rossum 的系列博客“The History of Python”。这个博客系列对我们理解Python及其演变很有帮助,经Guido同意,在这里翻译推荐给大家,希望大家喜欢,也请大家多多指教!
1. 缩进风格
Python最初的、也是最主要的影响来自ABC,一门由 CWI 设计于上世纪80年代初的编程语言(译注:见之前的博文)。ABC最初的目标是替代BASIC,成为一门教学语言,并成为针对个人用户的编程语言与编程环境。ABC的设计,立足于对用户编程行为的分析,之后根据用户测试的情况,发布了几个迭代版本。当时,我主要负责与集成编程环境(IDE)的对接。
(相关资料图)
Python对缩进的使用,就是直接借鉴于ABC。不过,使用缩进并不是ABC的发明——经由 Donald Knuth 的倡导,缩进在那时已经是一种众所周知的编程风格了(occam语言也使用了缩进风格)。
ABC团队创新的地方,是用冒号来区分缩进逻辑块的前导语句。最初,ABC也没有引入冒号,结果在用户测试中发现,编程初学者很难区分各种缩进。引入冒号之后,整个结构就清楚多了:冒号好像把前导语句与其后的逻辑块完美组合在了一起。
2. 主要数据类型
Python的主要数据类型也都来自ABC,只是作了一些调整。
ABC中的列表实际上是多重集,通过B树结构,保持列表中的数据是有序的。而ABC中的表,键值也是有序的。我认为这两种数据结构都不适合表现一些非常常用的数据,比如从文件中读取的文本行。(在ABC中,读取文本行必须使用表结构,并把行数作为键值,但这样的话,插入和删除行就会变得很复杂。)因此,我把列表改为无序的,并可以自由插入和删除,从而方便用户控制其序列。有需要时,也可以调用方法进行排序。
同时,我也用哈希表替代了ABC中的有序表。相对于B树来说,我认为哈希表更快,也更容易实现。理论上说,B树结构中的许多操作,在空间和时间复杂度上都是线性的,但在实际应用中,实现起来很困难,因为B树的算法本身比较复杂。而当表的规模比较小时,B树的效率更低。
Python 元组的封装与拆包操作其实是从ABC照搬过来的。不过元组内部实际上就是一个数组,因此我增加了索引和切片操作。
因为给元组增加了类似于数组的接口,我不得不考虑空元组或只有一个元素的元组要怎么表达的问题。作为从ABC借鉴过来的原则之一:任何一种数据类型,在打印、或者转换为字符串的时候,都应该让解析器能正常解析。同时我又得把只有一个元素的元组和带括号的参数区分开来。因此只得采取一种丑陋但务实的方式:如果元组只有一个元素,需要在元素后加一个逗号,如果是空元组,就用“()”表示。事实上,元组一般是不需要括号的,只有在空元组的时候必须用括号——我感觉如果用完全的“空(nothing)”表示空元组,可能很容易与大家的其它语法错误混淆起来。
Python 中的字符串和 ABC 中的字符串一样,都是不可变类型,但用了不同的符号,索引也改为从0开始。主要是因为 Python 中已经有三种可索引类型:列表、元组和字符串,它们的索引方式还是要统一为好,这样,一些核心方法才能保持一致,比如获取长度(len(s))、通过索引取值(s[i])、切片(s[i:j]),以及迭代(for i in s)等。
3. 数字类型
Python 和 ABC 最大的不同在数字类型。ABC 在运行时有两种数字类型,一种是精确数字,即任意精度有理数,一种是约略数字,即指定范围的二进制浮点数。这个有理数实在是槽点满满。(吐槽:有次我用ABC计算要交的税,公式很简单,但几个数字就运算了很久。研究了下发现,它居然算到了小数点后几千位,最后的结果却只需要小数点后一两位。)因此,在 Python 中,我使用了传统的数字模型,即系统位数的整型,以及系统位数的二进制浮点型,底层实现上,直接用的 C 语言中的长整数(long)和双精度浮点数(double)。
考虑到任意精度数字还是有很多重要的应用场景,我在 Python 中增加了一种大数类型,叫做长整型(long)。数年前我给 ABC 写过类似的实现(ABC最初的实现,也是我在ABC团队做的第一件事之一,底层用的是十进制表示方式),因此,这里就直接使用了现成的代码。
虽然我在 Python 中增加了大数类型,但还是应该强调,大多数场景中并不需要用到它。从我自己及我在CWI的同事所写的 Python 代码来看,大多数程序的运算时间中,很大部分都是整数运算,最常见的是计算内存索引。因此,我想,绝大多数情况下应该使用系统位数整型,大数类型只在少数情况下会用到,比如严谨的“数学”运算,或者以“分”为单位来计算美国国债的时候。
标签:
相关推荐:
最新新闻:
- daemon.exe daemon.exe进程是什么?有什么用? 环球观察
- PSN电脑怎么注册?PSN电脑上注册的步骤:当前聚焦
- tinyumbrella升级至4.21.02版本 备份更简便_独家焦点
- excel中INDEX函数怎么用?INDEX函数查询单元格的教程
- vivo云服务登录密码忘了怎么办?vivo云服务登录密码忘了解决方法 每日快播
- SpringBoot2.x系列教程54--NoSQL之整合
- 天天速看:Win10怎么添加bing搜索引擎?Win10添加bing搜索引擎的方法
- php龙之战争游戏搭建教程 龙之战争1.02正式版地图安装方法
- DirectX修复工具有什么作用?DirectX修复工具使用方法
- 世界热议:Win7系统中Telnet服务如何安装和启动?方法步骤如下
- Python早期设计与开发 主要数据类型有哪些?
- 如何设置时间校对同步?电脑时钟校准方法 焦点热门
- ac+是什么?ac+详情介绍
- 云盘哪个好?如何找到适合自己的网络云盘?:世界独家
- 什么是宽带网?宽带网详情介绍_环球今日讯
- 【天天播资讯】logo是什么意思?logo的中文含义
- 伦敦人被取暖账单和罢工淹没的新年
- fast无线路由器怎么设置?fast无线路由器设置方法步骤:短讯
- FTX创始人SBF拒绝认罪,10月再庭审 天天新消息
- 看视频更清晰 NV发布RTX视频超分辨率技术:快资讯
- 【天天快播报】《幻塔》获DLSS3 《死亡空间重制版》支持DLSS2
- 资讯:RTX40系笔记本电脑2月上市 售价6900元起
- 北半球“暖冬”,欧美天然气价格大跌,欧洲危机成过去式?|每日头条
- 联想台式主机仅重1007克 配12代酷睿 起售人民币2200元-全球热头条
- 预算五六千元买游戏本!选这3款一定不会采坑
- 卖不动了!苹果iPhone等四大产品线砍单:需求减弱是主因
- 3月1日起苹果全系电池涨价 要近千元:网友吐槽割韭菜:即时焦点
- Win11被打脸 PS/Office/游戏应用中Win10反而更快 全球通讯
- 《原子之心》新预告片展示华丽光线追踪和刺激战斗
- Roguelite风格FPS《巫火》DLSS3实机预告片分享
- 快消息!《三体》版权所有者游族“易主” 上海加游成最大股东
- 当前热门:RTX 40系列笔记本公布 999美元起、4050-4090都有
- M站年度评分最高游戏出炉 《艾尔登法环》成最大赢家|环球热资讯
- 踏空?懵了?昔日私募冠军回撤“创纪录”,投资老将遭遇尴尬时刻
- 环球微头条丨13代酷睿处理器+RTX 40显卡!宏碁暗影骑士系列CES焕新
- AMD新品来袭!宏碁CES推搭载锐龙7000的暗影骑士和传奇Go笔记本新品_今头条
- 资讯:宏碁推出eKinekt 酷骑桌 倡导活力永续生活方式
- 【环球快播报】居然比13代还贵 英特尔12代酷睿全线悄然涨价
- 当前动态:TrueGame平台更进一步!宏碁黑科技超级裸眼3D模式为游戏加冕
- 《神夏》主创:只要卷福华生回归 新一季明天就开搞|天天速看料
- 古巴是如何率先走出新冠疫情的?|全球观热点
- B社官网确认 《星空》将于2023年上半年发售
- 世界热讯:《艾尔登法环》获324个年度最佳奖项 破《最后生还者2》纪录
- “快银”演员亚伦·泰勒·约翰逊有望成为下一任007|天天新要闻
- 游族“卖身”,尘埃落定 天天热资讯
- 《艾尔登法环》超过《最后的生还者2》 成为年度游戏最多获得者-天天热议
- 网飞恐怖悬疑惊悚剧《1899》被砍 环球关注
- 网友吐槽世界各国的游戏女角色形象:中日韩完虐欧美?|每日热讯
- 环球即时看!世界由你开辟 PlayStation官方发布多城市户外巨屏超燃混剪
- 虎嗅【作·嗅之星】周榜第138期:世界百事通
- 新资讯:12月安卓手机性能榜发布,K60 Pro排第二,第一是这款
- 中关村在线获中国国际广告节2022广告主盛典年度整合营销金案
- 聚焦超大规模数据中心 施耐德电气助力运营商出海建设|要闻
- iPhone 14年末立减1000 年货节大促来了_报道
- 全球热资讯!一加11明天发布:现已上架 或3799起售
- 环球最新:玩家讨论《GTAOL》中的奇怪设定:空气墙让人折磨
- 环球视点!三年后,凤仙郡终于下雨了
- 球王贝利:球技与偏见:环球观天下
- 【爆料】一加将发布 Buds Pro 2 真无线耳机,支持主动降噪 全球微头条
- CES成车展?自动驾驶、智能出行成重要主题
- 雷军宣布卢伟冰晋升为集团总裁 称正处于全新阶段的起跑线上
- 【热闻】小米雷军发布 2023 全员信,新一年关键词「稳健推进,蓄势待发」
- 腾讯、完美、字节、阿里有机会接手 暴雪被爆与国内代理谈判进入实质阶段|当前速看
- 当前观察:招聘页面显示:育碧《阿凡达:潘多拉边境》或将有游戏内商城
- 全球最资讯丨消息称暴雪与国内代理谈判进入第二阶段:与网易破镜重圆不太可能
- 天天看热讯:《转生王女与天才千金的魔法革命》新预告 1月4日开播
- 天天速讯:如何不动声色的让身边的人知道你买RTX 4090了?
- 工信部:力争2023年底全国“专精特新”中小企业超过8万家,“小巨人”超1万家
- 每日快报!如何评估全球的新冠感染死亡人数?
- 全球聚焦:全球市场开门红:欧美股市走高 纳指期货涨1% 英国富时100指数涨2%
- 2023上班第一天,三个普通打工人的复苏企盼_天天新视野
- 提升用户体验 京东超V计划服务包荣获CNMO“年度手机服务贡献奖”
- 腾讯视频号开始收费!费率1-5%!|焦点速讯
- 真我10 Pro+新年礼盒开箱:新年氛围感拉满,让我们一起10来运转_全球热推荐
- 实名羡慕 乐视官宣实行每周四天半工作制度