Python数据类型
- 基本数据类型
- 1. 基本数据运算符
- 2. 整数
- 2.1 进制
- 2.2 类型转换
- 2.2.1 int()类型转换
- 2.2.2 自动转型
- 2.2.3 整数的范围
- 3. 浮点型
- 3.1 类型转换和四舍五入
- 3.1 增强型运算符
- 4. 布尔型
- 4.1 比较运算符
- 4.2 逻辑运算符
- 4.3 同一运算符
- 4.3.1 整数缓存问题
- 4.4 总结
- 5. 字符串类型
- 5.1 字符串编码
- 5.2 空字符串
- 5.3 len()计算字符串长度
- 5.4 转义字符
- 5.5 字符串拼接
- 5.6 从控制台读取字符串
- 5.7 str()实现数字转型字符串
- 5.8 使用[]提取字符
- 5.9 replace()实现字符串替换
- 5.10 字符串切片slice操作
- 5.11 split()分割和join()合并
- 5.12 字符串驻留机制
- 5.12 成员操作符in/not in
- 5.13 字符串操作汇总
- 5.13.1 常用查找方法
- 5.13.1 去除首尾信息
- 5.13.2 大小写转换
- 5.13.3 格式排版
- 5.13.4 其他方法
- 5.14 字符串的格式化
- 5.14.1 format()基本用法
- 5.14.2 填充和对齐
- 5.14.3 数字格式化
- 5.15 可变字符串
- 6. 时间类型
基本数据类型
Python主要有以下四种基本数据类型:整型,浮点型,布尔型和字符串型
1. 基本数据运算符
Python支持的整数和浮点数运算,有以下几种
运算符 | 说明 | 示例 | 结果 |
+ | 加法 | 3+2 | 5 |
- | 减法 | 30-5 | 25 |
* | 乘法 | 3*6 | 18 |
/ | 浮点数除法 | 8/2 | 4.0 |
/ / | 整数除法 | 7//3 | 2 |
% | 模(取余) | 7%4 | 3 |
** | 幂 | 2**3 | 8 |
注意,0不能作为除数
2. 整数
2.1 进制
Python中除了10进制还有其他三种进制:
- 0b 或 0B,二进制 0 1
- 0o 或 0O,八进制 0 1 2 3 4 5 6 7
- 0x 或 0X,十六进制 0 1 2 3 4 5 6 7 8 9 a b c d e
2.2 类型转换
2.2.1 int()类型转换
使用int()可以将其他类型的数据转换成整数
- 浮点数直接舍去小数部分。如,int(9.9)结果是9
- 布尔值True转为1,False转为0。如,int(True)结果是1
- 字符串整合整数格式 (浮点数字符串不能转)
2.2.2 自动转型
整数与浮点型混合运算时,表达式结果会自动转换成浮点型。如,2+8.0的结果是10.0
2.2.3 整数的范围
Python2中,整数int是32位,long是64位
Python3中,int可以存储任意大小的整数,long被取消。Python3 可以做超大数的计算,不会造成“整数溢出”,这也是Python适合科学运算的原因。
3. 浮点型
浮点数,称为float
3.1 类型转换和四舍五入
- 类似于int(),浮点型可以使用float()将其他类型转换成浮点型
- 整数和浮点型运算时,自动转换成浮点型
- round(value) 返回四舍五入的值
3.1 增强型运算符
运算符和赋值符=结合构成“增强型赋值运算符”
a += 1
a *= 2
#等价于
a = a+1
a = a*2
4. 布尔型
Python2中没有布尔值,直接用数字0表示False,用数字1表示True。
Python3中,把True和False定义为关键字,但他们的本质还是1和0,可以和数字相加
4.1 比较运算符
所有比较运算符返回1表示真,返回0表示假,分别与True和False等价。
运算符 | 描述 | 备注 |
== | 等于-比较对象的值是否相等 | a=1 b=1.0 a==b返回True |
!= | 不等于-比较对象的值是否不相等 | |
> | 大于 | |
< | 小于 | |
>= | 大于等于 | |
<= | 小于等于 |
4.2 逻辑运算符
运算符 | 格式 | 说明 |
or 逻辑或 | x or y | x和y中有一个为True,结果为True |
and 逻辑与 | x and y | x和y同时为True,结果才为True |
not 逻辑非 | not x | not True返回False,反之亦然 |
4.3 同一运算符
同一运算符比较两个对象的存储单元,实际比较的是对象的地址
运算符 | 描述 |
is | is是判断两个标识符是不是引用同一个对象 |
is not | is是判断两个标识符是不是引用不同对象 |
is 与 == 区别:
is用于判断两个对象地址是否相同
== 用于比较两个对象的值是否相同
4.3.1 整数缓存问题
在命令行中执行时,Python对比较小的整数对象进行缓存(范围[-5,256]),因此以下代码返回False
a = 10000
b = 10000
a == b
在保存成文件执行时,缓存的范围增大到[-5,任意正整数],因此以上代码返回True。
4.4 总结
- is用于判断两个对象地址是否相同
- == 用于比较两个对象的值是否相同
- 小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用
- is 运算符比==效率高,变量跟None比较时应该用is
5. 字符串类型
字符串的本质是字符序列。Python的字符串是不可变的,无法对原字符串做任何修改,但是可以将字符串的一部分复制到新创建的字符串,达到“看起来修改”的效果。
Python不支持单字符类型,单字符也是作为字符串处理的。
5.1 字符串编码
Python3直接支持Unicode,可以表示世界上任何书面语言的字符。Python3的字符默认就是16位Unicode编码,ASCII码是Unicode编码的子集
使用内置函数ord()可以把字符转换成对应的Unicode码。
使用内置函数chr()可以把十进制数字转换成对应的字符。
5.2 空字符串
Python允许空字符串‘’的存在,不包含任何字符
5.3 len()计算字符串长度
len(字符串变量)用于计算字符串含有多少字符。
5.4 转义字符
使用"+特殊字符",实现某些难以用字符表示的效果。常见的转义字符有
转义字符 | 描述 |
(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
\ ’ | 单引号 |
\” | 双引号 |
\b | 退格 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
5.5 字符串拼接
可以使用+将多个字符串拼接起来,字符串拼接有以下原则,
- 如果+两边都是字符串,则拼接
- 如果+两边都是数字,则加法运算
- 如果+两边类型不同,则抛出异常
可以将多个字面字符串直接放在一起拼接
a = "aa""bb"
#等价于
a = "aa" "bb"
#等价于
a = "aa"+"bb"
5.6 从控制台读取字符串
可以使用input()从控制台读取键盘输入的内容
myname = input("enter your name:")
5.7 str()实现数字转型字符串
str()可以将其他数据类型转换成字符串
a = str(5.20) # "5.20"
b = str(3.14e2) # "314.0"
c = str(True) # "True"
5.8 使用[]提取字符
字符串的本质就是字符序列,通过在字符串后添加[],在[]里指定偏移量,提取该位置的单个字符。
正向检索:最左侧表示第一个字符,偏移量是0,第二个偏移量是1,以此类推,直到len(str)-1为止。
反向检索:最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str)为止
5.9 replace()实现字符串替换
str.replace()会返回新的字符串,不会修改原字符串
a = "abcdefghijklmn" # 'abcdefghijklmn'
a = a.replace("c","99") # 'ab99defghijklmn'
5.10 字符串切片slice操作
切片slice操作可以让我们快速的提取子字符串,标准格式为:[起始偏移量start:终止偏移量end:步长step],包含start,不包含end
操作 | 说明 |
[:] | 操作整个字符串 |
[start:] | 从start开始到字符串结尾 |
[:end] | 从头开始到end-1 |
[step:end] | 从start开始到end-1 |
[step:step:end] | 从start开始到end-1,步长step |
[::-1] | 步长为负,从右向左反向提取 |
[::step] | 步长为step提取字符串 |
切片操作时,其实偏移量和终止偏移量不在[0,字符串长度-1]这个范围时,也不会报错。起始偏移量小于0,视作0,终止偏移量超出len-1时,视作-1
5.11 split()分割和join()合并
split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔符,则默认使用空白字符()
5.12 字符串驻留机制
对于符合标识符规则的字符串(仅包含下划线_,字符串和数字),会启用字符串驻留机制,也就是相同的字符串会被保存在字符驻留池中,仅被保留一次。
a = "abc_123"
b = "abc_123"
a is b #返回True
a == b #返回True
a = "dd##"
b = "dd##"
a is b #返回False
a == b #返回True
5.12 成员操作符in/not in
in/not in 用于判断字符或者子字符串是否只存在于字符串中
5.13 字符串操作汇总
5.13.1 常用查找方法
假设 a =“Life was like a box of chocolates, you never know what you’re gonna get”
方法 | 说明 | 示例 | 结果 |
len(a) | 字符串长度 | len(a) | 71 |
startswith() | 以指定字符串开头 | a.startswith(“Life”) | True |
endswith() | 以指定字符串开头 | a.startswith(“get”) | True |
find() | 第一次出现该字符串的位置 | a.find(“you”) | 35 |
rfind() | 最后一次出现该字符串的位置 | a.rfind(“you”) | 55 |
count() | 字符串出现的次数 | a.count(“you”) | 2 |
isalnum | 所有字符全是字母或数字 | a.isalnum() | False |
5.13.1 去除首尾信息
strip()去除字符串首尾指定信息,lstrip()去除字符串左边指定信息,rstrip()去除字符串右边指定信息。
a = "*choco*lates*"
a.strip("*") #'choco*lates'
a.lstrip("*") #'choco*lates*'
a.rstrip("*") #'*choco*lates'
5.13.2 大小写转换
a = “love and peace”
函数 | 说明 | 示例 | 结果 |
capitalize() | 产生新的字符串,首字母大写 | a.capitalize() | ‘Love and peace’ |
title() | 产生新的字符串,每个单词首字母大写 | a.title() | ‘Love And Peace’ |
upper() | 产生新的字符串,所有字母大写 | a.upper() | ‘LOVE AND PEACE’ |
lower() | 产生新的字符串,所有字母小写 | a.lower() | ‘love and peace’ |
swapcase() | 产生新的字符串,大小写转换 | a.swapcase() | ‘LOVE AND PEACE’ |
5.13.3 格式排版
center()、ljust()、rjust()这三个函数用于对字符串实现排版。示例如下
a = "XYZ"
a.center(10,"*") # '***XYZ****'
a.center(10) # ' XYZ '
a.ljust(10,"*"); #'XYZ*******'
5.13.4 其他方法
isalnum() 是否为字母或数字
isalpha() 检测字符串是否只有字母组成(含汉字)
isdigit() 检测字符串是否只由数字组成
isspace() 检测是否为空白符
isupper() 是否为大写字母
islower() 是否为小写字母
'XYZ100'.isalnum() #True
'woshi中国人'.isalpha() #True
'3.1415'.isdigit() #False
'31415'.isdigit() #True
'XYZ'.isupper() #True
' '.isspace() #True
'\t'.isspace() #True
'\n'.isspace() #True
5.14 字符串的格式化
5.14.1 format()基本用法
Python2.6开始, 新增了一种格式化字符串的函数str.format(),它增强了字符串格式化的功能。
基本语法是通过{}和:代替之前的%
a = "名字是{0},年龄是{1}"
a.format('李雷','18') #'名字是李雷,年龄是18'
a = "名字是{name},年龄是{age}"
a.format(name='李雷',age=18) #'名字是李雷,年龄是18'
5.14.2 填充和对齐
^、<、>分别表示居中、左对齐、右对齐,后面跟着数字宽度。
a = "abc{0:*>8}defg"
a.format('+++') #'abc*****+++defg'
5.14.3 数字格式化
浮点数通过f,整数通过d进行格式化,常用格式如下
格式 | 描述 | 数字 | 输出 |
{:.2f} | 保留小数点后两位 | “{:.2f}” .format(3.1415926) | 3.14 |
{:+.2f} | 带符号保留小数点后两位 | “{:+.2f}” .format(-3.1415926) | -3.14 |
{:.0f} | 不带小数 | “{:.0f}” .format(3.1415926) | 3 |
{:0>2d} | 左边数字填充0,数字总长度为2 | "{:0>2d} " .format(3) | 03 |
{:0<5d} | 右边数字填充0,数字总长度为5 | "{:0<5d} " .format(3) | 30000 |
{:.2%} | 百分比格式,小数点后面保留2位 | “{:.2%}” .format(0.25) | 25.00% |
{:.2e} | 指数记法,小数点后面保留2位 | “{:.2e}” .format(200003) | 2.00e+05 |
{:10d} | 右对齐,宽度为10 ,空格填充 | “{:10d}” .format(3) | 3 |
{:<10d} | 左对齐,宽度为10 ,空格填充 | “{:<10d}” .format(3) | 3 |
{:^10d} | 中间对齐,宽度为10,空格填充 | "{:^10d} " .format(3) | 3 |
5.15 可变字符串
Python字符串是不可变的,不能够原地修改,可以使用io.StringIO对象或array模块修改字符串。
import io
s = "hello,world"
sio = io.StringIO(s)
sio.getvalue() #"hello,world"
sio.seek(7)
sio.write('z')
sio.getvalue() #'hello,wzrld'
6. 时间类型
计算机中时间的表示是从“1970年1月1日 00:00:00”开始,以毫秒(1/1000秒)进行计算。我们也把1970年这个时刻成为“unix时间点”。因此,所有的时间都能够用数字表示。
Python中可以用time.time()获得当前时刻,返回的值是以秒为单位,带微秒(1/1000毫秒)精度的浮点数。比如,15301684903.8566。Python中使用time时,需要先引入time包。