关于Python发布三十周年的纪念

关于Python发布三十周年的纪念

一.史海钩沉

源起

1989年圣诞节期间的阿姆斯特丹,荷兰数学和计算机科学研究学会的Guido van Rossum为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承

Python(蟒蛇)一词取自英国20世纪70年代首播的电视喜剧《Monty Python’s Flying Circus》

ABC语言是在NWO(荷兰科学研究组织)旗下CWI(荷兰国家数学与计算机科学研究中心)的Leo Grurts,Lambert Meertens,Steven Pemberton主导研发一种交互式,结构化高级语言,旨在替代BASIC,Pascal等语言,用于教学及原型软件设计。Guido van Rossum于20世纪80年代曾在ABC系统开发中工作了数年

ABC语言主要特点如下:

  • 只有五种基本数据类型
  • 不需要变量声明(动态变量)
  • 明确支持自上而下的编程
  • 语句嵌套由缩进来表示
  • 精度,列表,字符串均无限制

*部分资料来源于网络

大事年表

1991年2月20日 Python的代码对外公布,版本为 0.9.0

1994年1月 Python 1.0 正式发布

2000年10月16日 Python 2.0 发布

2008年12月3日 Python 3.0 正式发布,不完全兼容Python 2

2020年10月5日 Python 3.9第一个正式版本发布

*部分资料来源于网络

二.编译型语言和解释型语言

计算机只能识别某些特定的二进制指令(机器码),在程序真正运行之前必须将源代码转换成二进制指令

有的编程语言要求必须提前将所有源代码一次性转换成二进制指令,也就是生成一个可执行程序,比如C、C++、Golang、Pascal(Delphi)、汇编等,这种编程语言称为编译型语言,转换工具称为编译器

有的编程语言可以一边执行一边转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序,比如 Python、JavaScript、PHP、Shell、MATLAB 等,这种编程语言称为解释型语言,转换工具称为解释器

Java 和 C# 是半编译半解释型的语言,源代码需要先转换成一种中间文件(字节码文件),再将中间文件拿到虚拟机中执行

编译型语言

编译型语言,需要将所有的源代码都转换成可执行程序,可执行程序里面包含的是机器码。只要拥有可执行程序,就可以随时运行,不用重新编译

编译型语言可以脱离开发环境运行,但一般在不同的操作系统之间不能随意切换

  • 不同操作系统对可执行文件的内部结构要求不同,彼此不兼容
  • 不同平台支持的函数、类型、变量等都可能不同

编译型语言,下载到的是可执行文件,源代码被作者保留,编译型语言的程序一般是闭源的

编译型语言运行效率高,但可移植性差,不够灵活

解释型语言

解释型语言,执行程序需要一边转换一边执行,用到哪些源代码就转换成机器码,用不到的不进行任何处理。执行程序时使用不同的功能,需要转换的源代码也不一样

每次执行程序都需要重新转换源代码,与编译型语言相比甚至存在数量级的差距,只有在应用层面才会使用解释型语言

解释型语言无法脱离开发环境,但几乎都能跨平台

  • 指源代码跨平台,不是解释器跨平台。解释器用来将源代码转换成机器码,就是一个可执行程序,绝对不能跨平台

  • 针对不同的平台开发不同的解释器,在不同的平台下,解释器会将相同的源代码转换成不同的机器码,解决了不同平台之间的差异

解释型语言,下载到的是所有的源代码,解释型语言的程序一般是开源的

解释型语言跨平台性好,但运行效率很低

三.Python 3和Python 2

Python的版本区别

print

print函数代替了print语句

>>> print "2,20"
2,20>>> print(2,20)
(2,20)

在 Python 3.x 中,print 语句被 print 函数取代

>>> print(2,20)
2 20

编码方式

Python 3.x 默认使用 UTF-8 编码,而Python 2.x 默认采用 ASCII 编码

UTF-8 编码,可以很好地支持中文或其它非英文字符

除法运算

在 Python 2.x 中,使用运算符 / 进行除法运算,整数相除的结果是一个整数,浮点数除法会保留小数点部分

>>>1/2
0
>>>1.0/2
0.5
在 Python 3.x 中使用 / 运算符,整数之间做除法运算,结果是浮点数

>>>1/2
0.5
使用运算符 // 进行的除法运算(floor 除法),输出不大于结果值的一个最大的整数(向下取整),此运算符用法相同

>>> -1//2
-1

异常

1.Python 2.x 版本中,所有类型的对象都是直接被抛出的,在 Python 3.x 版本中,只有继承 BaseException 的对象才可以被抛出

2.Python 2.x 版本中,捕获异常的语法是“except Exception,var:”;在 Python 3.x 版本中,捕获异常的语法变更为 “except Exception as var:3.Python 3.x 版本中,处理异常用 “raise Exception(args)”代替了“raise Exception,args”

4.Python 3.x 版本中,取消了异常类的序列行为和 .message 属性

八进制字面量表示

在 Python 3.x 中,表示八进制字面量的方式必须写成“0o1000#Python 2.x
>>> 0o1000
512
>>> 01000
512

#Python 3.x
>>> 0o1000
512

不等于运算符

Python 2.x 中的不等于运算符写法分别为 !=<>,在Python 3.x 中只有 != 

#Python 2.x
>>> 1!=2
True
>>> 1<>2
True

#Python 3.x
>>> 1!=2
True
>>> 1<>2
SyntaxError: invalid syntax

数据类型

Python 3.x 去除了 long 类型,只有一种整形 int

Python 3.x 新增了 bytes 类型,对应 Python 2.x 版本的八位串

>>>a=b'YOU' #定义bytes字面量的方法
>>>type(a)
<type 'bytes'>

#使用.encode() 或.decode()相互转化字符串对象和 bytes 对象
>>>b=a.decode()
>>>b
'YOU'
>>>b1=a.encode()
>>>b1
b'YOU'

Python 3.x 中,字典的 keys()、items() 和 values() 方法用返回迭代器

四.后记

偶然在CSDN的登录界面看到1991年的2月20日Python的代码对外公布,产生了在Python发布三十周年的这一天写下这篇文章作为纪念。

在查找资料的过程中,发现生日那天刚好是Python 2发布的日子,千禧年的10月16日,有点巧。

编程启蒙应该是小学接触过的VB,后来是在书店买的一本不属于那个年龄段的《C语言,从入门到精通》,后来按照教程下了编译器在屏幕上第一次用C语言输出了“Hello,World”,后来是一次断网的时候照着书敲打出了一个计算器……在那之后很长的一段时间里再也没有翻开那本书了。

上大学前没有完整地学习过一门语言,多是一知半解或者囫囵吞枣。上大学后接触的第一个编程语言便是Python,但是教的不是很多,在课上的那段时间隐隐记住了列表、元组之类的字眼,再后来就是这个在大二的寒假,几乎以每天一篇的速度在高产地学习和实验……

相比于其他语言,Python对于刚接触编程的来说显得十分友好,近乎于自然语言的语法和缩进规则……就一个初学者的视角来说,缩进可比带花括号优雅多了,繁琐的语法会极大地削减对于学习的欲望。

Python是正式学习的第一门语言,编程语言的学习不止有Python,还有更多语言等着去探索,但是如果想要有后话,请先从Python开始。

对于未来的迷茫丝毫不影响当下做出的每一次提升自己的决定,那些焦虑的背后是否真的能够做到问心无愧。(@YOUChanWill)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值