标识符(identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。标识符通常由字母和数字以及其它字符构成。(来源:百度百科)
注意:在Python3中,可以用中文作为标识符,即非ASCII标识符也是被允许的;但是建议仍使用英文作为标识符。
定义:保留字(reserved word),指在高级语言中已经定义过的字,程序员不能再将这些字作为变量名、过程名或函数名使用。每种程序设计语言都规定了自己的一套保留字。
保留字包括关键字和未使用的保留字:
关键字则指在语言中有特定含义,成为语法中一部分的那些字。在一些语言中,一些保留字可能并没有应用于当前的语法中,这就成了未使用的保留字与关键字的区别。一般出现这种情况可能是由于考虑扩展性。
import keyword
print(keyword.kwlist)
计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。
Python3 中有六个标准的数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典)。
Python3 的六个标准数据类型中,有三种不可变数据:Number(数字)、String(字符串)、Tuple(元组)。三种可变数据:List(列表)、Dictionary(字典)、Set(集合)。
Python3支持int、float、bool、complex(复数)。
Python3中,bool是int的子类(子类的概念以后再讲),True(用1表示)和False(用0表示)可以和数字相加。
Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样。
对于很大的数,例如10000000000,很难数清楚0的个数。Python允许在数字中间以_分隔,因此,写成100_0000_0000和10000000000是完全一样的。十六进制数也可以写成0xA1B2_C3D4。
为了标示进制间的区别,我们需要给它们加上前缀,整型的进制表示如下:
以下是进制表示的例子:
x = 0b1001
y = 0o3562
# a-f等英文字符在进制表示中不区分大小写
z_1 = 0x2af3
z_2 = 0x2AF3
Python进制转换的原理是将各种进制转换为10进制,这一步由int()函数完成;然后再将其转换为各种进制,这一步由bin()、oct()、hex()函数完成。
这些表达式的返回值除转换为十进制外都是字符串(字符串相关内容见后文)。
二进制 | 八进制 | 十进制 | 十六进制 | |
---|---|---|---|---|
二进制 | \ | bin(int(n,8)) | bin(int(n,10)) | bin(int(n,16)) |
八进制 | oct(int(n,2)) | \ | oct(int(n,10)) | oct(int(n,16)) |
十进制 | int(n,2) | int(n,8) | \ | int(n,16) |
十六进制 | hex(int(n,2)) | hex(int(n,8)) | hex(int(n,10)) | \ |
注意:当int()函数没有第二个参数时,第一个参数可以是各种数据类型,但有第二个参数时,第一个参数只能是字符串,其返回值为整型。
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的。
我们可以像正常写小数一样写浮点型。当要使用科学计数法时将10用e代替即可。
a = 10.0
b = 1.23e9
Python语言本身就支持复数及其简单运算,用“a + bj”表示即可,其中**“a”是实部,“b”是虚部,“j”是表示虚部的后缀**。实部和虚部会被自动转换成浮点型。获取实部请访问.real属性,虚部访问.imag属性,获取共轭复数请调用conjugate()方法。
a = 1j
b = 1 + 2j
c = 2 + 3j
d = b.real # 1.0
e = c.imag # 3.0
f = c.conjugate() # 2 - 3j
字符串分为str类型和bytes类型。
字符串是以单引号、双引号、三重单引号或三重双引号括起来的任意文本。请注意,引号本身只是一种表示方式,不是字符串的一部分。
如果单引号本身也是一个字符,那就可以用双引号括起来;反之亦然。三重引号可以横跨多行,单层引号则不行,如果需要单层引号跨行,请使用续行符(反斜杠:\)
a = "Hello, World!"
b = "What is 'Python'?"
c = 'What is "Python"?'
d = """
这是一段跨行文本,
惊不惊喜,意不意外?
"""
e = "这是一段跨行文本," \
"惊不惊喜,意不意外?"
如果字符串内部既包含单引号又包含双引号怎么办?那不就与外层的引号冲突了吗?当然有解决办法,我们可以用转义符(反斜杠:\)来标识。
a = "这是一段包含“\"”的文本,但使用反斜杠以后并未造成歧义。"
转义符当然不止这么一点用途,以下列出了常见的转义:
转义字符 | 说明 |
---|---|
\n | 换行符,将光标位置移到下一行开头。 |
\r | 回车符,将光标位置移到本行开头。 |
\t | 水平制表符,也即Tab键,一般相当于四个空格。 |
\a | 蜂鸣器响铃。注意不是喇叭发声,现在的计算机很多都不带蜂鸣器了,所以响铃不一定有效。 |
\b | 退格(Backspace),将光标位置移到前一列。 |
\\ | 反斜线 |
\’ | 单引号 |
\" | 双引号 |
如果我们在一个字符串中有很多反斜杠,而这些反斜杠又不代表转义怎么办?
我们可以为字符串添加一个“r”前缀。
a = r"这个\不用于转义。"
Python当然也提供了很多种字符串前缀,常见前缀如下:
字符串前缀 | 作用 |
---|---|
u | 前缀u表示该字符串是Unicode编码,Python2中用。用在含有中文字符的字符串前,防止因为编码问题导致中文出现乱码。Python3的默认字符串编码为Unicode。 |
r | 前缀r表示该字符串是原始字符串,即\不是转义符,只是单纯的一个符号。注意不能在原始字符串结尾输入反斜杠,若要在原始字符串结尾输入反斜杠,可以再加一个用于转义\的字符串。 |
b | 前缀b表示该字符串是bytes类型。 |
f | Python3.6新加特性,前缀f用来格式化字符串。而且加上f前缀后,支持在大括号内运行Python表达式。你还可以用fr前缀来表示原生字符串。 |
我们一般用str表示字符序列,但是还有另一种包含原始数据的字符序列:bytes。bytes可能在网络传输和文件读写时用到。
计算机自己能理解的“语言”是二进制数,所以它最小的信息标识是二进制数,8个二进制位表示一个字节;而我们人类所能理解的语言文字则是一套由英文字母、汉语汉字、标点符号字符、阿拉伯数字等等很多的字符构成的字符集。如果要让计算机来按照人类的意愿进行工作,则必须把人类所使用的这些字符集转换为计算机所能理解的二进制码,这个过程就是编码,它的逆过程称为解码。
转换的方式很简单,就是把一个“数”与一个字符对应。常见的编码方式有ASCII,Unicode,GB系列,UTF-8和UTF-16。
更多详细内容请移步这篇博客。
bytes是计算机中直接使用并处理的数据类型,而str是一种人类可读的字符。
a = "Hello"
b = b"Hello"
那么在这段代码中,a和b有什么区别呢?为什么都使用了人类可读的字符呢?因为b在Python解释器中会自动按照Unicode被编码为bytes。如果一段bytes数据可以被编码为str,那么当然要显示为str,因为可以便于我们去阅读。
我们使用encode()方法和decode()方法实现str和bytes的互化:
a = "Hello"
b = b"World"
c = a.encode("UTF-8") # b"Hello"
d = b.decode("UTF-8") # "World"
(未完待续。。。)