更新历史:
- 2021年5月31日完成初稿
Python的基本数据类型包括数字类型和字符串类型,利用基本数据类型可以编写一些小的程序来完成相应的功能,尽管它们非常简单,但已经包含了python语言中很多语法概念。
1. 数字类型
Python中,数字类型包含整数类型、浮点数类型和复数类型,它们不需要特别地定义,根据程序的输入而自动具有某种类型。
1.1 数字类型的表示
通俗地讲,没有小数点的数是整数,而有小数点的数是浮点数,有虚数单位(j)的数称为复数。在计算机里,整数、浮点数和虚数都有特定的表示方法,如下表所示:
整数 | 表示方法 |
---|---|
十进制整数 | 即数学上的整数,如1、-2等 |
二进制整数 | 用前导符0b/0B引导,用0、1序列表示,如0b101 |
八进制整数 | 用前导符0o/0O引导,用0 ~ 7的序列表示,如0o37 |
十六进制整数 | 用前导符0x/0X引导,用0 ~ 1、a ~ f和A ~ F的序列表示,如0x5E |
什么是进制?
进制是指进位计数制,是人为定义的带进位的计数方法。十进制是最常用的进制规则,如“逢十进一”,除此之外,生活中还有十二进制(钟表)等,而在计算机中,计算机常常采用二进制、八进制和十六进制表示法。
浮点数 | 表示方法 |
---|---|
十进制表示 | 由整数部分、小数点和小数部分(可以为0)构成,如3.14 |
科学计算法表示 | 用e和E作为幂的符号,表示以10为底的指数,如0.0314e2(即0.0314*102) |
精度
在数学上,像1/3、 π \pi π这样的无限小数是无法用有限位表示的,因此有了精度的概念, π \pi π = 3.14…中小数部分的位数越长,精度越高。在计算机里,也有相似的概念,有些浮点数无法精确表示,只能近似表示,注意这一点可以避免一些误解。
复数 | 表示方法 |
---|---|
a + bj | 由实数部分a和虚数部分b构成,j为虚数单位,如1+2j |
对于一个虚数,可以利用.real和.imag方法获得其实部和虚部,如(a + bj).real = a
、(a + bj).imag = b
。
1.2 数学运算
对于数字类型而言,常用的操作即为数学运算,除了加减乘除之外,针对不同的数字类型还有不同的数学运算方法。在python中,提供了数值运算操作符、数值运算函数和类型转换函数,如下表所示:
运算符 | 含义 | 例子 |
---|---|---|
+ | 加法/正号 | 1 + 1 = 2 |
- | 减法/负号 | 3 - 1 = 2 |
* | 乘法 | 2 * 3 = 6 |
/ | 除法 | 1 / 3 = 0.333333 |
// | 整除 | 1 // 3 = 0 |
% | 求余 | 5 % 3 = 2 |
** | 乘方 | (-3)**2 = 9 |
值得注意的是,不同数字类型之间可以进行运算,对于运算的结果有以下规则:
- 整数之间运算,结果是小数则其类型为浮点数,结果是整数则其类型为整数;
- 整数和浮点数运算,结果类型为浮点数类型
- 整数/浮点数和复数运算,结果类型为复数类型
函数 | 含义 | 例子 |
---|---|---|
abs(x) | 取x的绝对值 | abs(-1) = 1 |
pow(x,y) | 求xy | pow(2,3) = 8 |
max(x1, x2, …xn) | 取最大值 | max(3, 4, 5) = 5 |
min(x1, x2, …xn) | 取最小值 | min(3, 4, 5) = 3 |
divmod(x, y) | 求商和余数 | divmod(10,3) = (3, 1) |
round(x) | 对x向偶数舍入 | round(3.5) = 4 |
round()向偶数舍入
实际上,round()还有另外一个参数ndigit(保留小数位数,默认为0),向偶数舍入是指舍入之后为值为偶数。现在以十进制小数a.x
舍入为例介绍一下具体规则:a.x
舍入可能取值为a
或者a+1
,那么要确定取整至何值,应该看x
的值:
- 如果
x < 5
,则向下取整,因为a.x
离a
更近;- 如果
x > 5
,则向上取整,因为a.x
离a+1
更近;- 如果
x = 5
,那么因为a.x
离a
、a+1
一样近,那么采用向偶数取整,即取值使得整数部分是偶数。
当然在python中有许许多多的python自带的函数,这些函数有很多参数,通过help()命令即可查看函数的具体功能。最后,介绍一下python中类型转换函数,其强制将一种类型的转换为另一种类型:
>>> int(3.14)
>>> 3
>>> float(3)
>>> 3.0
>>> complex(3, 4)
>>> (3+4j)
除了abs()、round()内置函数之外,还可以利用math第三方库中的库函数对数字类型的值进行处理,利用help(math)即可查看math中的函数和常数,下面列出几个常用的函数:
math | 描述 |
---|---|
math中的常数 | |
math.pi | 圆周率 |
math.e | 自然对数 |
math中的函数 | |
math.fabs(x) | 求绝对值 |
math.pow(x,y) | 求xy |
math.sqrt(x) | 求 x \sqrt x x |
math.exp(x) | 求ex |
math.ceil(x) | 向上取整 |
math.floor(x) | 向下取整 |
math.gcd(x,y) | 返回x和y的最大公约数 |
math.sin(x) | sin(x) |
第三方库
函数分为内置函数和第三方库函数,第三方库即不是python内置的库,通常需要利用import函数将第三方库导入python中再作使用(当然前提是已经下载了第三方库)。如导入math,需要利用语句import math
。
2. 字符串类型
字符串是字符的序列表示,可以通过基本的字符串操作符、内置字符串处理函数和字符串处理方法等字符串进行操作。
2.1 字符串的表示
在python中,可以利用单引号、双引号和三引号(三个单引号)来表示字符串,python提供的字符串表示是为了高效地表示含引号的字符串。一般而言,当有以下需求时可以选用不同的字符串表示方法:
- 字符串单行,且含有单引号,则选用「双引号」,如
"That's an apple."
; - 字符串单行,且含有双引号,则选用「单引号」,如
'我在学"pythn"的基础知识'
; - 字符串多行,则选用「三引号」。
三引号与注释
在程序设计时,为了别人理解自己的代码,常常会在程序中加入注释,即用自然语言阐明关键代码的含义,python有两种表示注释的方法:
- 用#引导单行注释,如
#这里可以写单行注释
- 用’’'引导多行注释,如
'''这里可以写多行注释'''
在计算机中,字符串由0个或多个字符组成,字符采用Unicode编码,其在字符串中表示如下(以字符串“python”为例):
通过下标索引便可以访问字符串中的字符,其索引有两种形式,第一种形式是0 ~ N-1,第二种是-1 ~ -N,具体索引方式见下文所述。
Unicode编码
Unicode编码是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案,常见的编码方式还有ASCII编码,其只包含英文字符。
2.2 字符串处理
由于字符串类型在python中非常常见,因此python提供了字符串操作符、内置字符串处理函数和字符串处理方法来对字符串进行处理。
Python提供了5个字符串操作符:
操作符 | 意义 |
---|---|
s1 + s2 | 连接两个字符串,形成一个字符串 |
s * n | 复制n次字符串s,例如'a' * 3 = 'aaa' |
s in str1 | 判断字符串s是否是str1的子串,返回True/False(真/假) |
s[i] | 对字符串进行索引,返回第i个字符 |
s[start : end : step] | 对字符串进行切片,返回第start个到第end个字符串,步长为step,不包含end |
利用字符串的索引,往往有意想不到的效果,如利用s[::-1]便可以将字符串逆置。其次,在python中还提供了字符串处理函数,它们对于处理字符串非常有用:
字符串处理函数 | 意义 |
---|---|
len(s) | 返回字符串长度 |
str(s) | 将任意类型的s转换为对应的字符串 |
chr(s) | 返回Unicode编码s对应的单字符,如chr(65) = 'A' |
ord(s) | 返回单字符s表示的Unicode编码 |
最后,在python中还内置了一些字符串处理方法,通过help(str)可以查看字符串常用的字符串方法,下表列出常用的字符串处理方法:
字符串处理方法 | 意义 |
---|---|
s.lower() | 将字符串s全部字符变为小写,并返回副本(原字符串不变) |
s.upper() | 将字符串s全部字符变为大写,并返回副本 |
s.islower() | 判断字符串s中是否全是小写字符,返回True/False |
s.isnumeric() | 判断字符串s中是否全是数字 |
s.split(sep = None) | 用sep分隔字符串,并返回列表 |
s.replace(old, new) | 在字符串s中,用字符new全部替换字符old,并返回副本 |
s.center(width) | 字符串居中函数 |
s.strip([chars]) | 返回s的副本,取去除其中[chars]列出的字符 |
s.format() | 字符串格式化方法,见2.3节 |
方法与函数
对于上面的字符串处理函数/处理方法,其本质是一致的,但字符串处理方法是某个对象(此处为字符串s)的函数,需要通过对象.函数
的方法进行使用,而字符串处理函数则可能适用于变量,如len()适用于求字符串、列表、元组等数据类型的长度。
2.3 字符串的应用
在python的很多地方,都有字符串的身影,比如在程序的输入输出中就有字符串在发挥作用。
在python中,常常通过函数input()输入字符,其总会得到一个字符串,之后对字符串进行处理就可以得到想要的输入的数据,如下图所示:
>>> num = int(input("Please enter a num: ")) # 用int()处理字符串
Please enter a num: 1
>>> num
1
而在输出中,往往利用print()将值打印在屏幕上,但是这样的输出有些生硬,我们总是希望能够想上面的“Please enter a num:”提示信息一样按照一定格式输出,这就需要利用s.format()方法,下面通过一个例子来展示一下:
>>> a, b, c = eval(input("Please enter three numbers: "))
Please enter three numbers: 1, 2, 3
>>> print("{} + {} + {} = {}".format(a, b, c, a+b+c))
1 + 2 + 3 = 6
上面就是利用.format()方法对字符串"{} + {} + {} = {}"进行格式化输出,其中的{}是占位符,由.format()中变量来填充。对于.format()方法,事实上还有很多可以参数来设置输出数据的格式,在此就不赘述了。
eval()函数
eval()可以评估一个字符串的值,即识别字符串中的值,并将其赋值给表达式左边的变量。