Python 数据类型
Python 数据类型
检测数据类型:
type(变量名)
1.变量赋值方式
变量名自定义,要满足标识符命名规则
1.单一变量赋值
变量名 = 值
2.链式赋值
将同一个对象赋值给多个变量。
a=b=1 相当于:a=1; b=1
3.系列解包赋值
若干数据赋值给对应相同个数的变量(个数必须保持一致)
a,b,c=1,2,3 相当于:a=1;b=2;c=3
使用系列解包赋值实现a、b值的交换:
>>> a,b=1,2
>>> a,b=b,a
>>> print(a,b)
2 1
2.基本数据类型
- 整型
整数,1,10,5 - 浮点型
小数,3.14 或者科学计数法 314e-2 、314E-2 - 布尔型
表示真假,仅包含:True、False - 字符串型
由字符组成的序列。 “abc”,”你好”
3.算数运算符
Python支持整数(如:50,520)和浮点数(如:3.14,10.0, 1.23e2)。
可以使用算数运算符对数字进行运算。
运算符 | 功能 | 示例 | 结果 |
---|---|---|---|
+ | 加法 | 1+2 | 3 |
- | 减法 | 2-1 | 1 |
* | 乘法 | 2*2 | 4 |
/ | 除法 | 6/3 | 2 |
// | 整除 | 9//4 | 2 |
% | 取余 | 9%4 | 1 |
** | 幂 | 2**3 | 8 |
() | 提高运算优先级 | (1+2)*2 | 6 |
/(除法)和 //(整除)
0不能当作除数,否则报错
3/0
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
3/0
ZeroDivisionError: division by zero
divmod()函数
# divmod()可以同时得到商和余数
divmod(9,4)
(2, 1)
返回值为元组类型
4.整型数据 int
int()实现类型转换:
1.浮点数直接舍去小数部分。如:int(9.9)结果是:9
2. 布尔值 True 转为 1,False 转为 0。 如:int(True)结果是 1
3. 字符串符合整数格式则直接转成对应整数,否则报错
int("456")
456
int("456abc")
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
int("456abc")
ValueError: invalid literal for int() with base 10: '456abc'
int("456.78")
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
int("456.78")
ValueError: invalid literal for int() with base 10: '456.78'
整数和浮点数混合运算时,表达式结果自动转型成浮点数。比如:1+2.0的结果是3.0。
Python3的整数位数可以无限大。
5.浮点型数据 float
浮点数用 a*b^10 形式的科学计数法表示。比如:3.14,表示成:314E-2 或者 314e-2。 这些数字在内存中也是按照科学计数法存储。
类型转换和四舍五入
1.可以使用 float()将其他类型转化成浮点数。
2. 整数和浮点数混合运算时,表达式结果自动转型成浮点数。比如:2+8.0 的结果是 10.0
3. round(value)可以返回四舍五入的值
注:但不会改变原有值,而是产生新的值
例1、时间的表示
计算机中时间的表示是从“1970 年 1 月 1 日 00:00:00”开始,以毫秒(1/1000 秒) 进行计算。我们也把 1970 年这个时刻成为“unix 时间点”。
python 中可以通过 time.time() 获得当前时刻,返回的值是以秒为单位的浮点值。
import time
time.time()
1658149974.9443562
b = int(time.time())
b
1658149854
例2、定义多点坐标、绘出折线并计算起始点和终点距离
import turtle
import math
#定义多个点的坐标
x1,y1 = 100,100
x2,y2 = 100,-100
x3,y3 = -100,-100
x4,y4 = -100,100
#绘制折线
turtle.penup()
turtle.goto(x1,y1)
turtle.pendown()
turtle.goto(x2,y2)
turtle.goto(x3,y3)
turtle.goto(x4,y4)
distance = math.sqrt((x1-x4)**2 + (y1-y4)**2)
turtle.write(distance)
6.布尔型数据 bool
布尔型数据可以进行数值运算,True == 1,False == 0
a = True
b = 2
a + b
3
比较运算符
a = 1,b = 2
运算符 | 判断内容 | 示例 | 结果 |
---|---|---|---|
== | 判断是否相等,相等返回True,否则返回False | a == b | False |
!= | 判断是否相等,不相等返回True,否则返回False | a != b | True |
< | 判断左边是否小于右边,小于返回True,否则返回False | a < b | True |
> | 判断左边是否大于右边,大于返回True,否则返回False | a>b | False |
<= | 判断左边是否小于等于右边, 小于等于返回True,否则返回False | a <= b | True |
>= | 判断左边是否大于等于右边, 大于等于返回True,否则返回False | a >= b | False |
逻辑运算符
运算符 | 格式 | 说明 |
---|---|---|
or | a or b | x 为 true,则不计算 y,直接返回 true x 为 false,则返回 y |
and | a and b | x 为 true,则返回 y 的值 x 为 false,则不计算 y,直接返回 false |
not | not a | x 为 true,返回 false x 为 false,返回 true |
同一运算符
运算符 | 说明 |
---|---|
is | is 是判断两个标识符是不是引用同一个对象(比较地址是否相同) |
is not | is not 是判断两个标识符是不是引用不同对象 |
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个,既比较对象的地址。
== 用于判断引用变量引用对象的值是否相等,默认调用对象的 __eq__()方法。
is 运算符比 == 效率高,在变量和 None 进行比较时,应该使用 is
整数缓存问题
在命令行中执行Python将范围为[-5, 256]的整数进行缓存;
在Pycharm 或者保存为文件执行时可以将范围为[-5,任意正整数]的整数进行缓存
复合赋值运算符
运算符 | 作用 | 示例 | 结果 |
---|---|---|---|
+= | 加法赋值 字符串拼接 | a += b | a = a + b |
-= | 减法赋值 | a -= b | a = a - b |
*= | 乘法赋值 | a *= b | a = a * b |
/= | 浮点除赋值 | a /= b | a = a / b |
//= | 整数除赋值 | a //= b | a = a // b |
%= | 取余赋值 | a %= b | a = a % b |
**= | 幂运算赋值 | a **= b | a = a ** b |
<<= | 左移赋值 | a <<= b | a = a << b |
>>= | 右移赋值 | a >>= b | a = a >> b |
复合赋值运算符中间不能有空格(+ =是错误书写)
7.字符串
在 Python 中,字符串属于不可变对象
7.1字符串编码
Python3 直接支持 Unicode,可以表示世界上任何书面语言的字符。
使用内置函数 ord()可以把字符转换成对应的 Unicode 码
使用内置函数 chr()可以把十进制数字转换成对应的字符
ord('A')
65
chr(66)
'B'
7.2创建字符串
单引号字符串:
a = 'abc'
b = "efg"
三引号字符串(多行字符串)
a = '''Hello world
hello Python
1'''
print(a)
Hello world
hello Python
1
7.3字符串长度
Python 允许空字符串的存在,不包含任何字符且长度为 0。
例如:
c = ''
len(c)
0
len()用于计算字符串含有多少字符:
a = '你好python' # 一个汉字是一个字符长度
len(a)
8
7.4转义字符
转义字符 | 描述 |
---|---|
\ (在行尾时) | 续行符 |
\\ | 一个反斜杠符号\ |
\’ | 单引号 |
\" | 双引号 |
\b | 退格 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
7.5字符串拼接
1.可以使用+将多个字符串拼接起来。
例如:’aa’+ ’bb’ == ’aabb’
+两边都是字符串,拼接
+两边都是数字,数值运算
+两边类型不同,报错
2.可以将多个字面字符串直接放到一起实现拼接。
例如:’aa’’bb’ == ’aabb’
7.6字符串复制
使用*可以实现字符串复制
7.7不换行输出
使用print 时,会自动打印一个换行符
如果不想换行,不想自动添加换行符。我们可以自己通过参数 end = “任意字符串”。实现末尾添加任何内容。
7.8读取输入字符串
7.9str()实现数字转换字符串类型
7.10字符串下标
字符串的本质就是字符序列,字符串里的每个字符都有对应的下标。
'abcdef'
字符 | a | b | c | d | e | f |
---|---|---|---|---|---|---|
正向下标 | 0 | 1 | 2 | 3 | 4 | 5 |
反向下标 | -6 | -5 | -4 | -3 | -2 | -1 |
在字符串中提取字符
我们可以通过在字符串后面添加[],在[]里面指定下标,以提取对应的字符。
字符串切片操作
[起始偏移量 start:终止偏移量 end:步长 step]
切片的区间: [start,end )
起始下标和终止下标不在[0,字符串长度-1]这个范围,也不会报错。
起始下标小于 0,则会当做 0。
终止下标大于“长度-1”会被当成-1。
例如:
"abcdefg"[3:50]
'defg'
7.11split()分割和 join()合并
split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔符,则默认使用空白字符(换行符/空格/制表符)。
join()可以将一系列子字符串连接起来
+和join()区别:
使用字符串拼接符+,会生成新的字符串对象,效率低
join 函数,因为 join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝, 仅新建一次对象,效率高。
7.12字符串驻留机制和字符串比较
字符串驻留:
仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中(地址相同)。
对于符合标识符规则的字符串(仅包含下划线(_)、字母 和数字)会启用字符串驻留机制。
字符串比较和同一性:
==,!=对字符串进行比较,是否含有相同的字符。
is / not is,判断两个对象是否同一个对象。比较的是对象的地址,即 id(obj1)是 否和 id(obj2)相等。
成员操作符:
in /not in 关键字,判断某个字符(子字符串)是否存在于字符串中。
str_2 = 'a b c d e f'
'a' in str_2
True
7.13字符串常用操作方法
1、常用查找方法
a = ‘hello world hello python’
方法 | 说明 | 结果 |
---|---|---|
len(a) | 字符串长度 | 24 |
a.startswith(‘h’) | 以指定字符串开头 | True |
a.find(‘e’) | 第一次出现指定字符串的位置 | 1 |
a.rfind(‘e’) | 最后一次出现指定字符串的位置 | 13 |
a.count(‘e’) | 指定字符串出现了几次 | 2 |
a.isalnum() | 所有字符全是字母或数字 | False (有空格字符) |
2、去除首尾信息
strip()去除字符串首尾指定信息。
lstrip()去除字符串左边指定信息。
rstrip()去除字符串右边指定信息。
3、大小写转换
str1 = ‘hello world hello python’
示例 | 说明 | 结果 |
---|---|---|
str1.capitalize() | 产生新的字符串,首字母大写 | ‘Hello world hello python’ |
str1.title() | 产生新的字符串,每个单词都首字母大写 | ‘Hello World Hello Python’ |
str1.upper() | 产生新的字符串,所有字符全转成大写 | ‘HELLO WORLD HELLO PYTHON’ |
str1.lower() | 产生新的字符串,所有字符全转成小写 | ‘hello world hello python’ |
str1.swapcase() | 产生新的,所有字母大小写转换 | ‘HELLO WORLD HELLO PYTHON’ |
4、格式排版
center()、ljust()、rjust()
5、其他方法
- isalnum() 是否为字母或数字
- isalpha() 检测字符串是否只由字母组成(含汉字)。
- isdigit() 检测字符串是否只由数字组成。
- isspace() 检测是否为空白符
- isupper() 是否为大写字母
- islower() 是否为小写字母
7.14字符串的格式化
format ()
format 函数可以接受不限个参数,位置可以不按顺序。
a = "名字是:{0},年龄是:{1}"
a.format("小明",18)
'名字是:小明,年龄是:18'
a.format("小红",19)
'名字是:小红,年龄是:19'
b = "名字是:{0},年龄是{1}。{0}学习很好"
b.format("小明",18)
'名字是:小明,年龄是18。小明学习很好'
c = "名字是{name},年龄是{age}"
c.format(age=19,name='小红')
'名字是小红,年龄是19'
填充与对齐
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定默认用空格填充
{索引}/{参数名:填充字符^/</>宽度}
数字格式化
{索引}/{参数名:.2f}保留两位小数
7.15可变字符串
在 Python 中,字符串属于不可变对象,不支持原地修改。
原地修改字符串,可以使用 io.StringIO 对象或 array 模块。