该笔记适用于《北京千峰Python教程(孙长凯sunck 2017.04版)》。
注释中“01-12. 面向对象提升与收发邮件04”代表第1章第12节(天)的第04课。
1.1 什么是Python?
01-01. python概述
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。
Python由Guidovan Rossum于1989年底发明,第一个公开发行版发行于1991年。
像PerI语言一样,Python源代码同样遵循GPL(GNU General Public License)协议。
- Python是一种解释型语言
开发过程中没有了编译这个环节,类似于PHP和PerI语言。 - Python是交互式语言
可以在一个Python提示符,直接互动执行程序。 - Python是面向对象语言
Python支持面向对象的风格或代码封装在对象的编程技术。 - Python是初学者的语言
Python对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理 WWW浏览器再到游戏。
发展历史
Python是由GuidovanRossum在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。
Python本身也是由诸多其他语言发展而来的,这包括ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell和其他的脚本语言等等。
现在Python是由一个核心开发团队在维护,Guido van Rossum仍然占据着至关重要的作用,指导其进展。
特点
- 易于学习
Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。 - 易于阅读
Python代码定义的更清晰。 - 易于维护
Python的成功在于它的源代码是相当容易维护的。 - 一个广泛的标准库
Python的最大的优势之一是丰富的库,跨平台的,在UNIX、Windows和Macintosh兼容很好。 - 互动模式
互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片段。 - 可移植
基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。 - 可扩展
如果需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。 - 数据库
Python提供所有主要的商业数据库的接口。 - GUI编程
Python支持GUI可以创建和移植到许多系统调用。 - 可嵌入
你可以将Python嵌入到C/C++程序,让你的程序的用户获得“脚本化”的能力。
缺点
- 运行速度慢
和C程序相比非常慢,因为Python是解释型语言,代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。 - 代码不能加密
如果要发布Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的。所以,凡是编译型的语言,都没有这个问题(不需要把源代码发布出去),而解释型的语言,则必须把源码发布出去。
1.2 python安装
因为Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序,放到Linux上也是能够运行的。
目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的,3.x版越来越普及。
1.3 数据的存储
01-02~04
1.3.1 内存
- 概述
内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。
内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。
抽象:一个开关,有两种状态,开启和关闭。一种状态对应1,另一种状态对应0。把八个开关放到一间房间里,这个房间称为“一个字节”,一个开关代表“一位”。每个房间都有门牌号,看做“地址”。把无数个房间堆叠起来组成摩天大厦,可以把摩天大厦看成“内存”。
- 单位
1bit
8bit——1字节
1024字节 ——1K
1024K ——1M
1024M——1G
1024G——1T
内存中以二进制形式存储数据。
1.3.2 进制
- 二进制
0 1 逢二进一
0 + 0 = 0
0 + 1 = 1
1 + 1 = 10
11 + 1 = 11
- 八进制
0 1 2 3 4 5 6 7 逢八进一
1 + 7 = 10
1 + 2 = 3
- 十进制
0 1 2 3 4 5 6 7 8 9 逢十进一
- 十六进制
0 1 2 3 4 5 6 7 8 9 a b c d e f 逢十六进一
1 + f = 10
内存地址用十六进制数表示。
1.3.3 进制转换
- 十进制→二进制
倒除法,余数逆序。
10(10)→1010(2)。
- 二进制→十进制
当前的数字,乘以2的位数次方,最后相加。
0x2^0 + 1x2^1 + 0x2^2 + 1x2^3 = 0 + 2 + 0 + 8 = 10。
1010(2)→10(10)。
- 八进制→二进制
【一转三位】八进制的一位相当于二进制的三位,转换时按照十进制转换
65(8)→110101(2)。
- 十六进制→二进制
【一转四位】十六进制的一位相当于二进制的四位,转换时按照十进制转换
a4(16)→10100100(2)。
- 二进制→八进制
【三位一取】从低位开始取,高位不够补0。
110101(2)→65(8)。
- 二进制→十六进制
【四位一取】从低位开始取,高位不够补0。
10(10)→1010(2)。
| 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 3 | 3 |
| 4 | 100 | 4 | 4 |
| 5 | 101 | 5 | 5 |
| 6 | 110 | 6 | 6 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | a |
| 11 | 1011 | 13 | b |
| 12 | 1100 | 14 | c |
| 13 | 1101 | 15 | d |
| 14 | 1110 | 16 | e |
| 15 | 1111 | 17 | f |
1.3.4 数据存储
01-05. 原码&补码&反码
计算机存储数据,先开辟内存空间,再存储数据。计算机开辟内存的最小单位是字节。在存储数据时,用最高位标识符号,1表示负数,0表示正数。
- 原码
规定了字节数,写明了符号位,就得到了数据的原码
00000000000000000000000000000001
10000000000000000000000000000001
——————————————————
10000000000000000000000000000010
- 反码
正数的反码是其原码,负数的反码是其原码的符号位不动,其他位取反
00000000000000000000000000000001
11111111111111111111111111111110
——————————————————
11111111111111111111111111111111
- 补码
正数的补码是其原码,负数的补码是其反码加1
00000000000000000000000000000001
11111111111111111111111111111111
——————————————————
100000000000000000000000000000000
- 结论
计算机以补码的形式存储数据。
