编程基础
编译型语言和解释型语言
对于编译型语言来说,在执行之前先要经过编译器将源码转换成 CPU 可识别的机器码文件(比如 Windows 下的 .exe 文件);解释型语言无需预先编译,而是由解释器逐行对源码进行解释,一边解释一边执行。
编译型语言
- 可执行程序不能跨平台
- 源代码不能跨平台
解释型语言
- 一次编写,到处运行
- 解释型语言的执行效率天生就低于编译型语言
字符集和字符编码
Unicode 字符集又称万国码、国际码、统一码等。从名字就可以看出来,它是以统一符号为目标的字符集。
- 字符集定义了字符和二进制的对应关系,为每个字符分配了唯一的编号。可以将字符集理解成一个很大的表格,它列出了所有字符和二进制的对应关系,计算机显示文字或者存储文字,就是一个查表的过程;
- 字符编码规定了如何将字符的编号存储到计算机中,为了区分一个字符到底使用了几个字节,就不能将字符的编号直接存储到计算机中,字符编号在存储之前必须要经过转换,在读取时还要再逆向转换一次,这套转换方案就叫做字符编码。
UTF-8 是目前使用最广的一种 Unicode字符集的实现方式。Python 默认采用 UTF-8 编码。
注释
解释器在执行代码时会忽略注释,不做任何处理,就好像它不存在一样。
在调试(Debug)程序的过程中,注释还可以用来临时移除无用的代码。
一般情况下,合理的代码注释应该占源代码的 1/3 左右。
单行注释
Python 使用井号#
作为单行注释的符号
1 | # 注释 |
多行注释
Python 使用三个连续的单引号’’’或者三个连续的双引号”””注释多行内容
1 | ''' |
当注释符作为字符串的一部分出现时,就不能再将它们视为注释标记,而应该看做正常代码的一部分
缩进规则
通常情况下都是采用 4 个空格长度作为一个缩进量(默认情况下,一个 Tab 键就表示 4 个空格)。
通过设置多行代码的缩进量,可以使用 Ctrl+]
和 Ctrl+[
快捷键,此快捷键可以使所选中代码快速缩进(或反缩进)。
编码规范
Python 采用 PEP 8 作为编码规范,其中 PEP 是 Python Enhancement Proposal(Python 增强建议书)的缩写,8 代表的是 Python 代码的样式指南。
- 每个 import 语句只导入一个模块,尽量避免一次导入多个模块
- 不要在行尾添加分号,也不要用分号将两条命令放在同一行
- 建议每行不超过 80 个字符,如果超过,建议使用小括号将多行内容隐式的连接起来,而不推荐使用反斜杠 \ 进行连接。
- 使用必要的空行可以增加代码的可读性
- 在运算符两侧、函数参数之间以及逗号两侧,都建议使用空格进行分隔。
标识符命名规范
- 标识符是由字符(A
Z 和 az)、下划线和数字组成,但第一个字符不能是数字。 - 标识符不能和 Python 中的保留字相同。有关保留字,后续章节会详细介绍。
- Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符。
- 字母是严格区分大小写
- 以下划线开头的标识符有特殊含义
- 当标识符用作模块名时,应尽量短小,并且全部使用小写字母,可以使用下划线分割多个字母,例如 game_mian、game_register 等。
- 当标识符用作包的名称时,应尽量短小,也全部使用小写字母,不推荐使用下划线,例如 com.mr、com.mr.book 等。
- 当标识符用作类名时,应采用单词首字母大写的形式。
- 模块内部的类名,可以采用 “下划线+首字母大写” 的形式。
- 函数名、类中的属性名和方法名,应全部使用小写字母,多个单词之间可以用下划线分割。
- 常量命名应全部使用大写字母,单词之间可以用下划线分割。
变量类型
变量定义与使用
将数据放入变量的过程叫做赋值。
1 | name = value |
Python 是弱类型的语言
弱类型语言两个特点:
- 变量无须声明就可以直接赋值,对一个不存在的变量赋值就相当于定义了一个新变量。
- 变量的数据类型可以随时改变,比如,同一个变量可以一会儿被赋值为整数,一会儿被赋值为字符串。
弱类型是说在书写代码时不用刻意关注类型,但是在编程语言的内部仍然是有类型的。
int
整数就是没有小数部分的数字,Python 中的整数包括正整数、0 和负整数。
Python 整数的取值范围是无限的,不管多大或者多小的数字。
float
小数通常以浮点数的形式存储。
print 在输出浮点数时,会根据浮点数的长度和大小适当的舍去一部分数字,或者采用科学计数法。
string
若干个字符的集合就是一个字符串(String)。必须由双引号" "
或者单引号' '
包围。
字符串的内容可以包含字母、标点、特殊符号、中文、日文等全世界的所有文字。
要想换行书写一个比较长的字符串,必须在行尾添加反斜杠\
。
1 | s2 = 'It took me six months to write this Python tutorial. \ |
也支持表达式的换行。
1 | num = 20 + 3 / 4 + \ |
长字符串中的换行、空格、缩进等空白符都会原样输出。
1 | longstr = '''It took me 6 months to write this Python tutorial. |
在普通字符串或者长字符串的开头加上r
前缀,就变成了原始字符串。
1 | str1 = r'原始字符串内容' |
bytes
bytes 类型用来表示一个字节串。
字节串(bytes)和字符串(string)的对比:
- 字符串由若干个字符组成,以字符为单位进行操作;字节串由若干个字节组成,以字节为单位进行操作。
- 字节串和字符串除了操作的数据单元不同之外,它们支持的所有方法都基本相同。
- 字节串和字符串都是不可变序列,不能随意增加和删除数据。
bytes 只是简单地记录内存中的原始数据。
- 字符串的内容都是 ASCII 字符,直接在字符串前面添加
b
前缀就可以转换成 bytes。 - 调用构造方法 bytes(),可以将字符串按照指定的字符集转换成 bytes;如果不指定字符集,那么默认采用 UTF-8。
- 字符串 encode() 方法,该方法专门用来将字符串按照指定的字符集转换成对应的字节串;如果不指定字符集,那么默认采用 UTF-8。
使用不同方式创建 bytes 对象。
1 | b1 = bytes() |
bytes decode() 方法,通过该方法可以将 bytes 对象转换为字符串。
1 | #通过 decode() 方法将 bytes 转换成字符串 |
对于非 ASCII 字符,print 输出的是它的字符编码值(十六进制形式),而不是字符本身。
bool
布尔类型可以当做整数来对待,即 True 相当于整数值 1,False 相当于整数值 0。
类型转换
函 数 | 作 用 |
---|---|
int(x) | 将 x 转换成整数类型 |
float(x) | 将 x 转换成浮点数类型 |
complex(real,[,imag]) | 创建一个复数 |
str(x) | 将 x 转换为字符串 |
repr(x) | 将 x 转换为表达式字符串 |
eval(str) | 计算在字符串中的有效 Python 表达式,并返回一个对象 |
chr(x) | 将整数 x 转换为一个字符 |
ord(x) | 将一个字符 x 转换为它对应的整数值 |
hex(x) | 将一个整数 x 转换为一个十六进制字符串 |
oct(x) | 将一个整数 x 转换为一个八进制的字符串 |