和我一起学Python3 第五节 保留字、变量和数据类型

保留字

所谓保留字,就是在一种程序设计语言中,具有特殊含义的单词。
它们不能作为变量名、函数名、对象名等标识符使用。

要想查看当前版本的Python保留字列表,请使用下面的命令:

>>> import keyword
>>> keyword.kwlist

变量

和初中数学课本里的“变量”一样。在Python中,它不仅可以是一个实数,它还可以是一个虚数,以及任意的数据类型。

声明一个变量的方法为:

变量名 = 值

变量名开头不能是阿拉伯数字,可以使用各国文字、英文、下划线作为开头。

在Python中,所有的“变量”只是一个“引用”。你可以理解为,它是一个实际存在的数据的名称。通过这个名称,你就可以访问对应的数据。

操作符 “=”(赋值) 可以使得左边的“变量名”与右边的“值”建立对应关系。

下面的语句可以创建一个名为a的变量,值为1:

a = 1

这样的变量名是合法的:

私は変数 = 123
我是变量 = 456
_123 = 321

而这样的变量名是非法的:

1a = 789

数据类型

Python的数据类型分为两类:可变对象和不可变对象。

不可变对象一旦被创建,无法更改。你可以通过运算符、函数调用来产生一个新的数据,替换掉原有的数据或者给它一个新的变量名。

可变对象在创建完毕之后,可以修改它的内容。

Python中的不可变对象为:

  • None(空)
  • int(整数)
  • float(浮点数)
  • bool(布尔)
  • complex(复数)
  • String(字符串)
  • Tuple(元组)
  • bytes(字节)

可变对象为:

  • List(列表)
  • Dictionarie(字典)
  • Set(集合)

None

None表示空值,它是一个特殊的值,含义就是“什么也没有”。注意,None与0不等价。

数值

整数

在Python 3中,整数的长度是无限的。
整数的例子如下:

123
-321
1234567890123456789
0

浮点数

Python中提供的浮点数为双精度(64bit)浮点数。与C语言中的double类型相同。
Python不支持单精度浮点数。

浮点数的例子如下:

123.45
-321.01
5.0
.9

复数

复数是一对浮点数。其中一个表示实部,另一个表示虚部。
Python的复数由实部、+或-、虚部和j构成。
这是一些复数的例子:

>>> z = 12-2.3j
>>> z = -1.2+3.4j
>>> z.real
-1.2
>>> z.imag
3.4

不能对复数使用除法、取模和三个参数的pow()操作。(三个参数的pow是幂取模运算)。
复数类型有一个方法conjugate(),它可以改变虚部的符号:

>>> z.conjugate()
(-1.2-3.4j)

该方法会返回一个新的复数,它的虚部符号和原复数相反。

精确十进制小数

虽然大部分情况下,使用浮点数导致的数值不精确问题对程序的影响不大,而且浮点数的运算速度优势足以掩盖它的缺点。不过,在某些情况下,例如涉及到金钱的计算,即使要付出时间的代价,也要确保它的完全准确性。这时候我们可以使用 Python 提供的 decimal 模块。
要使用它,需要先导入 decimal 模块,像这样:

>>> import decimal
>>> a = decimal.Decimal(123)
>>> b = decimal.Decimal("4567.8901234567890123")
>>> a + b
Decimal('4690.8901234567890123')

math 和 cmath 模块提供的函数不适用于处理 decimal ,但是 math 模块所提供的函数在 decimal 里存在对应的方法。比如,要计算 $e^x$ (x 是一个浮点数),可以使用 math.exp(x)。如果 x 是一个 decimal.Decimal,你需要使用 x.exp()。
decimal.Decimal 数据类型还提供ln()方法,用于计算自然对数(以e为底)。

布尔

布尔类型只有两个值:TrueFalse
布尔类型用来表述逻辑含义:真和假。
True为真,False为假。
用于条件语句。

字符串

字符串是用单引号(')或者双引号(")括起来的任意文本。
不要使用中文单引号和双引号。只有英文单引号和英文双引号才符合Python语法。

使用三个单引号括起来可以表示多行文本。

单引号字符串 = '使用单引号括起来的文本'
双引号字符串 = "使用双引号括起来的文本"
包含单引号的字符串 = "这一段文本中包含了'单引号'"
包含双引号的字符串 = '这一段文本中包含了"双引号"'
包含转义字符的字符串 = '我既包含了单引号\',又包含了双引号"'
多行文本 = '''第一行
第二行
第三行
第四行'''
双引号多行文本 = """ 一段有换行的文字 """

在上述代码中,第五个字符串包含了转义符号:\
输入一些不能直接输入或者显示的字符,需要使用转义字符。

Python 转义字符表:

转义字符 含义
\newline 忽略换行
\\ 反斜杠
\' 单引号
\" 双引号
\a 蜂鸣
\b 退格
\f 走纸
\n 换行
\N{name} 给定名称的 Unicode 字符
\ooo 给定八进制值的字符
\r 回车符
\t 制表符
\uhhhh 给定16位十六进制值的 Unicode 字符
\Uhhhhhhhh 给定32位十六进制值的 Unicode 字符
\v 垂直制表符
\xhh 给定8位十六进制值的 Unicode 字符

如果不想使用转义符号,你可以使用r前缀:

>>> text = r'末尾的换行是没有用的\n'
>>> print(text)
末尾的换行是没有用的\n

由于Python3的字符串在内存中以Unicode表示,一个字符对应N个字节,如果你想在网络上传输或者写入文件,需要转为bytes类型。
使用前缀b来创建bytes类型的数据:

>>> a = b'Hello'

bytes的每一个字符只能占用一个字节。

通过使用encode()方法,可以将字符串编码为指定编码的bytes,像这样:

>>> 'Hello'.encode('utf-8')
b'Hello'
>>> '你好'.encode('utf-8')
b'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> '你好'.encode('ascii')

最后一行会报错:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

基本类型相互转换

下面这些函数用于转换数据类型(括号为参数,[]内的是可选参数):

函数 功能
chr(a) 返回ASCII码对应的字符串
ord(x) 返回一个字符的Unicode值
complex(real[,imaginary]) 将字符串或数字转为复数
float(x) 将数字或字符串转换为浮点数
int(x[,base]) 将数字或字符串转换为一个整数,base为基数(进制)
hex(x) 将整数转换为十六进制数(字符串形式)
oct(x) 将整数转换为八进制数(字符串形式)
str(object) 把一个对象转换为字符串
list(x) 将序列对象转换为列表
tuple(x) 把序列对象转换为元组(Tuple)
type(x) 返回对象的数据类型

这是一些示例:

>>> int("123")
123
>>> str(1) + str(1)
'11'
>>> chr(61)
'='
>>> ord('A')
65
>>> float(23)
23.0
>>> complex(12,3.4)
(12+3.4j)
>>> list((12,34,56)) #参数是tuple
[12, 34, 56]
>>> tuple([3,4,5]) #参数是list
(3, 4, 5)

发表评论