Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

编程基础

编译型语言和解释型语言

对于编译型语言来说,在执行之前先要经过编译器将源码转换成 CPU 可识别的机器码文件(比如 Windows 下的 .exe 文件);解释型语言无需预先编译,而是由解释器逐行对源码进行解释,一边解释一边执行。

编译型语言

  • 可执行程序不能跨平台
  • 源代码不能跨平台

解释型语言

  • 一次编写,到处运行
  • 解释型语言的执行效率天生就低于编译型语言

字符集和字符编码

Unicode 字符集又称万国码、国际码、统一码等。从名字就可以看出来,它是以统一符号为目标的字符集。

  • 字符集定义了字符和二进制的对应关系,为每个字符分配了唯一的编号。可以将字符集理解成一个很大的表格,它列出了所有字符和二进制的对应关系,计算机显示文字或者存储文字,就是一个查表的过程;
  • 字符编码规定了如何将字符的编号存储到计算机中,为了区分一个字符到底使用了几个字节,就不能将字符的编号直接存储到计算机中,字符编号在存储之前必须要经过转换,在读取时还要再逆向转换一次,这套转换方案就叫做字符编码。

UTF-8 是目前使用最广的一种 Unicode字符集的实现方式。Python 默认采用 UTF-8 编码。

注释

解释器在执行代码时会忽略注释,不做任何处理,就好像它不存在一样。

在调试(Debug)程序的过程中,注释还可以用来临时移除无用的代码。

一般情况下,合理的代码注释应该占源代码的 1/3 左右。

单行注释

Python 使用井号#作为单行注释的符号

1
2
3
# 注释
# 说明单行代码的功能时一般将注释放在代码的右侧
print( 100 % 7 ) # 输出余数

多行注释

Python 使用三个连续的单引号’’’或者三个连续的双引号”””注释多行内容

1
2
3
4
5
'''
使用 3 个单引号分别作为注释的开头和结尾
可以一次性注释多行内容
这里面的内容全部是注释内容
'''

当注释符作为字符串的一部分出现时,就不能再将它们视为注释标记,而应该看做正常代码的一部分

缩进规则

通常情况下都是采用 4 个空格长度作为一个缩进量(默认情况下,一个 Tab 键就表示 4 个空格)。

通过设置多行代码的缩进量,可以使用 Ctrl+]Ctrl+[ 快捷键,此快捷键可以使所选中代码快速缩进(或反缩进)。

编码规范

Python 采用 PEP 8 作为编码规范,其中 PEP 是 Python Enhancement Proposal(Python 增强建议书)的缩写,8 代表的是 Python 代码的样式指南。

  1. 每个 import 语句只导入一个模块,尽量避免一次导入多个模块
  2. 不要在行尾添加分号,也不要用分号将两条命令放在同一行
  3. 建议每行不超过 80 个字符,如果超过,建议使用小括号将多行内容隐式的连接起来,而不推荐使用反斜杠 \ 进行连接。
  4. 使用必要的空行可以增加代码的可读性
  5. 在运算符两侧、函数参数之间以及逗号两侧,都建议使用空格进行分隔。

标识符命名规范

  1. 标识符是由字符(AZ 和 az)、下划线和数字组成,但第一个字符不能是数字。
  2. 标识符不能和 Python 中的保留字相同。有关保留字,后续章节会详细介绍。
  3. Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符。
  4. 字母是严格区分大小写
  5. 以下划线开头的标识符有特殊含义
  • 当标识符用作模块名时,应尽量短小,并且全部使用小写字母,可以使用下划线分割多个字母,例如 game_mian、game_register 等。
  • 当标识符用作包的名称时,应尽量短小,也全部使用小写字母,不推荐使用下划线,例如 com.mr、com.mr.book 等。
  • 当标识符用作类名时,应采用单词首字母大写的形式。
  • 模块内部的类名,可以采用 “下划线+首字母大写” 的形式。
  • 函数名、类中的属性名和方法名,应全部使用小写字母,多个单词之间可以用下划线分割。
  • 常量命名应全部使用大写字母,单词之间可以用下划线分割。

变量类型

变量定义与使用

将数据放入变量的过程叫做赋值。

1
name = value

Python 是弱类型的语言

弱类型语言两个特点:

  • 变量无须声明就可以直接赋值,对一个不存在的变量赋值就相当于定义了一个新变量。
  • 变量的数据类型可以随时改变,比如,同一个变量可以一会儿被赋值为整数,一会儿被赋值为字符串。

弱类型是说在书写代码时不用刻意关注类型,但是在编程语言的内部仍然是有类型的。

int

整数就是没有小数部分的数字,Python 中的整数包括正整数、0 和负整数。

Python 整数的取值范围是无限的,不管多大或者多小的数字。

float

小数通常以浮点数的形式存储。

print 在输出浮点数时,会根据浮点数的长度和大小适当的舍去一部分数字,或者采用科学计数法。

string

若干个字符的集合就是一个字符串(String)。必须由双引号" "或者单引号' '包围。

字符串的内容可以包含字母、标点、特殊符号、中文、日文等全世界的所有文字。

要想换行书写一个比较长的字符串,必须在行尾添加反斜杠\

1
2
3
s2 = 'It took me six months to write this Python tutorial. \
Please give me more support. \
I will keep it updated.'

也支持表达式的换行。

1
2
3
num = 20 + 3 / 4 + \
2 * 3
print(num)

长字符串中的换行、空格、缩进等空白符都会原样输出。

1
2
3
4
longstr = '''It took me 6 months to write this Python tutorial.
Please give me a to 'thumb' to keep it updated.
The Python tutorial is available at http://c.biancheng.net/python/.'''
print(longstr)

在普通字符串或者长字符串的开头加上r前缀,就变成了原始字符串。

1
2
str1 = r'原始字符串内容'
str2 = r"""原始字符串内容"""

bytes

bytes 类型用来表示一个字节串。

字节串(bytes)和字符串(string)的对比:

  • 字符串由若干个字符组成,以字符为单位进行操作;字节串由若干个字节组成,以字节为单位进行操作。
  • 字节串和字符串除了操作的数据单元不同之外,它们支持的所有方法都基本相同。
  • 字节串和字符串都是不可变序列,不能随意增加和删除数据。

bytes 只是简单地记录内存中的原始数据。

  • 字符串的内容都是 ASCII 字符,直接在字符串前面添加b前缀就可以转换成 bytes。
  • 调用构造方法 bytes(),可以将字符串按照指定的字符集转换成 bytes;如果不指定字符集,那么默认采用 UTF-8。
  • 字符串 encode() 方法,该方法专门用来将字符串按照指定的字符集转换成对应的字节串;如果不指定字符集,那么默认采用 UTF-8。

使用不同方式创建 bytes 对象。

1
2
3
4
5
6
7
b1 = bytes()
b2 = b""
#为 bytes() 方法指定字符集
b4 = bytes('C语言中文网8岁了', encoding='UTF-8')
print("b4: ", b4)
#通过 encode() 方法将字符串转换成 bytes
b5 = "C语言中文网8岁了".encode('UTF-8')

bytes decode() 方法,通过该方法可以将 bytes 对象转换为字符串。

1
2
3
#通过 decode() 方法将 bytes 转换成字符串
str1 = b5.decode('UTF-8')
print("str1: ", str1)

对于非 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 转换为一个八进制的字符串

评论