文章目录
链式赋值
a=b=123
系列解包赋值
a,b,c=1,2,3
a,b=b,a
可以实现变量值互换
常量
python不支持常量,只能逻辑上不对它进行修改(该值表达什么??)
a=3
MAX_SPEED=140
print(MAX_SPEED)
MAX_SPEED=120 #可以进行修改值,注意常量所以字母大写
内置数据类型
- 整形
- 浮点型
- 布尔型
- 字符串型
整数除法用 // (表示整除)
浮点数除法用 / (结果是浮点数)
取余用 %
divmod可以同时得到商和余数,返回的是一个元组
divmod(10,5) Out[7]: (2, 0)
加减乘正常
幂运算用**
`a=2**3=8
浮点型指小数或科学计数法 如:314e-2
整形和浮点型混合运算,结果是浮点型
开方处理用math.sqrt(),需要导入math
整数
- 十进制,二进制(0b或0B),八进制(0o或0O),十六进制(0x或0X,0-9,a-f)
- 可以存储任意大小的数(10**100)
#测试进制,将其他进制转换成十进制
12
0b101
0o10
0x10
- 使用int()实现类型转换
- 浮点型直接舍去小数部分
- 布尔型true转为1,false转为0
- 字符串符合整数格式(浮点数格式不行)转为整数,否则报错
#使用int()
int("456")
int(456.78)
int(True)
浮点数
float
314e-2或314E-2
- 使用float()进行类型转化(生成了一个新的对象,类型是float)
a=3.14e-2
float(a)
b=3
float(b)
a=3.14e-2
float(a)
Out[14]: 0.0314
b=3
float(b)
Out[15]: 3.0
- 使用round()进行四舍五入
int()是直接舍去小数部分
不会改变原值,而是生成新的值
a=3.74
print(round(a))
print(a)
4
3.74
增强型赋值运算符
+=, -_, *=, /=, //=, **=, %=
时间
unix时间点:1970年0时0分0秒
以毫秒计算
time.time()需要import time
time.time()返回时间是以秒为单位,但是有微秒精度值(6位小数)
import time
time.time()
a=int(time.time()) #用time.time()获取当前时间
totalminute=a//60
totalhour=totalminute//60
print(a)
print(totalminute)
print(totalhour)
1606199425
26769990
446166
布尔值
True和False本质是0,1,被定义成关键字
可以进行加减操作
a=True
b=3
print(a+b)
4
4
True
比较运算符
- ==, !=, >, <, >= , <=
- 返回True或者False
逻辑运算符
- or: x or y
x为True,返回True,否则返回y
a=True
b=False
print(a or 30)
print(b or 30)
True
30
- and: x and y
x为True,则返回y值;x为false,不计算y值,返回false
- not: not x
x为True,返回False;x为False,返回True
a=True
b=False
print(a or 30)
print(b or 30)
print(a and 30)
print(b and 30)
print(not a)
print(not b)
True
30
30
False
False
True
同一运算符
比较两个对象的存储单元,实际比较的是对象的地址
- is:两个标识符是不是引用一个对象
- is not:是不是引用不同对象
- python缓存问题:在命令行执行时:[-5,256]之间的小整数在全局解释器范围被放入缓存供重复使用,所以比较地址是相同的
- is 比 == 运算效率高,在变量和none比较时,应用is
a=100
b=100
print(a==b)
print(a is b)
print(a is not b)
print(id(a))
print(id(b))
True
True
False
140734056672752
140734056672752
a=1000
b=1000
print(a==b)
print(a is b)
print(a is not b)
print(id(a))
print(id(b))
True
False
True
1823781292560
1823781292944
字符串
- 字符串不可变
- 字符串的一部分可以复制到新的字符串,实现更改
- 不支持单字符类型,单字符也作为一个字符串
- python使用Unicode,用16位表示一个字符(65536)
- 使用ord()可以把字符(长度为一的字符串)转换成对应的Unicode码
- 使用chr()把十进制转换成对应的字符
创建字符串
单引号双引号都可以
如果该字符串内带单(双)引号,外面必须用双(单)引号
连续三个单引号或双引号可以创建多行字符串
空字符串里面不能有空格
可以用len()查字符串长度
resume='''name="gaogao" company="ast" age=3'''
kong=""
print(resume)
print(len(resume))
print(len(kong))
name="gaogao" company="ast" age=3
33
0
转义字符
- \+特殊字符表示转意
字符串的拼接
形成一个新的字符串
- 可以用加号(必须保证两边都是字符串)
- 可以直接将字符串放在一起
#字符串的拼接
a="12""34"
b="56"+"78"
print(a)
print(b)
1234
5678
字符串的复制
a="12"*3
print(a)
121212
不换行打印
- 默认换行输出
- 用end="任意字符串"
print("12",end=" ")
print("34", end="\'")
print("78",end="\t")
print("56",end="\r")
12 34'78 56
print("12",end=" ")
print("56",end="\r")
print("34", end="\'")
print("78",end="\t")
34'78
print("12",end=" ")
print("78",end="\t")
#print("56",end="\r")
print("34", end="\'")
12 78 34'
控制台读取字符串
- 用input()
myname=input("请输入名字:")
print(myname)
请输入名字:gao
gao
数字转型成字符串
- 用str()
- 整形浮点型和布尔值都可以
使用[]提取字符
字符串的本质是字符序列,添加索引或偏移量,提取该位置的单个字符
1.正向搜索:左侧便宜偏移为0,右侧为len(str)-1
2.反向搜索:最右侧偏移量-1,最左侧为-len(str)
- 字符串不能直接赋值修改
- 用replace去更改(是生成一个新字符串,原来的字符串不变)
- 是全部修改
- 下图程序b和c效果相同
#更换字符串,是全部修改
a="abdddefghi"
b=a.replace("d","c")
c=a.replace(a[2],"c") #也是全部修改
print(a)
print(b)
print(c)
print(a[3])
print(b[-6])
abdddefghi
abcccefghi
abcccefghi
d
c
字符串切片
- slice
[起始偏移量:终止偏移量:步长]
包头不包尾
注意起始量到终止量的顺序要与步长保持一致,默认步长为+1
a="abcdefghijklmnopq"
print(a[:])
print(a[1:5:2])
print(a[::-1])
print(a[-3:])
print(a[-8:-3])
print(a[1:9:-1]) #是错的,方向错误
print(a[9:1:-1]) #是对的
abcdefghijklmnopq
bd
qponmlkjihgfedcba
opq
jklmn
print(a[9:1:-1]) #错的,输不出序列
jihgfedc
split分割和join合并
- split()
可以基于指定分隔符分割字符串成多个子字符串(存储到列表中)
如果不适用指定分隔符,默认使用空白字符(换行符/空格/制表符)
a="to be or not to be"
print(a.split())
print(a.split("be"))
['to', 'be', 'or', 'not', 'to', 'be']
['to ', ' or not to ', '']
- join()拼接
需要一个列表,里面存储待拼接的子字符串
可以用特殊字符间隔也可以不用
a=["I","love","you"]
b=" ".join(a)
c="*".join(a)
print(b)
print(c)
I love you
I*love*you
使用+来拼接式,每次执行加操作,都会生成一个新的字符串,join直接生成最终的,推荐使用join
#测试join和+的运行时间差
import time
time01=time.time()
a=""
for i in range(100000):
a+="sxt"
time02=time.time()
print("运行时间为:"+str(time02-time01))
time03=time.time()
b=[]
for i in range(100000):
b.append("sxt")
time04=time.time()
print("运行时间为:"+str(time04-time03))
运行时间为:0.024933338165283203
运行时间为:0.008974313735961914
字符串的比较与同一性
符合命名规则的相同字符串,是同一对象,id相同,这一点与int不同
is/is not来判断id是否相同
a="abcd"
b="abcd"
print(a is b)
print(a is not b)
True
False
成员操作符
in/not in来判断是该字符串是否在另一字符串中,返回布尔值
a="abccdefghi"
print("bcd" in a)
print("abd" not in a)
False
True
字符串常用操作
#常用方法
a="abcdefghijklmnfopqrst"
print(len(a))
print(a.startswith("abc")) #是否用该字符串开头
print(a.endswith("rst")) #结尾
print(a.find("f")) #查找第一个f的位置
print(a.rfind("f")) #查找最后一个f的位置
print(a.count("f")) #有几个f
print(a.isalnum()) #是否都为字母或是数字
21
True
True
5
14
2
True
去除首尾字符串
- 不改变原来字符串的值
a="*a*b*c*d*"
print(a.strip("*")) #去除首尾的该字符串
print("*a*b*c*".lstrip("*")) #去除左侧该字符串
print(a.rstrip("*")) #去除右侧该字符串
a*b*c*d
a*b*c*
*a*b*c*d
大小写转换
- 生成新的,不改变原来的字符串
a="abcdefghijklmn"
print(a.capitalize()) #首字母大写
print(a.title()) #每个单词首字母大写
print("i love you".title())
print(a.upper()) #全部大写
print("ABCDE".lower()) #全部小写
print("abcdABCD".swapcase()) #大小写转换
Abcdefghijklmn
Abcdefghijklmn
I Love You
ABCDEFGHIJKLMN
abcde
ABCDabcd
格式排版
- 生成新的,不改变原来的字符串
a="sxt"
print(a.center(10,"*")) #10个字符,a在中间,其余用*补齐
print(a.center(10)) #用空格补齐
print(a.ljust(10,"*")) #居左对齐
print(a.rjust(10,"*"))
***sxt****
sxt
sxt*******
*******sxt
其他方法
a="abcdefghijk"
print(a.isalnum())
print(a.isalpha())
print(a.isdigit())
print(a.isspace())
print(" ".isspace())
print(a.isupper())
print(a.islower())
True
True
False
False
True
False
True
格式化
- 可以用顺序格式:{}里写索引
- 可以用命名格式:当用命名的形式时,赋值时必须明确名字,而不能按顺序方式
可以用整数去填写
a="name is:{0},age is :{1}"
b=a.format("gaogao",18)
print(b)
#当用命名的形式时,赋值时必须明确名字,而不能按顺序方式
c="name is:{name},age is:{age}"
d=c.format(name="lili",age=18)
print(d)
name is:gaogao,age is :18
name is:lili,age is:18
填充与对齐
- {索引:填充符号 对齐方式 总共位数}
- ^: 居中;< : 左对齐 , >:右对齐
对整数来说,用不用引号无所谓
print("{:*^10}".format("123"))
print("{:*^10}".format(123)) #对整数来说,用不用引号无所谓
print("i am {0}, i like the number {1:0>8}".format("gaogao",666))
***123****
***123****
i am gaogao, i like the number 00000666
数字格式化
- 当用d的时候,一定要用整数填充
a="i have the number{:.2f}"
b="i have the number{:+.2f}"
c="i have the number{:.0f}"
d="i have the number{:0>2d}"
e="i have the number{:X<4d}"
f="i have the number{:,}" #以逗号分割的方式
g="i have the number{:.2%}"#百分比两位小数
h="i have the number{:+.2E}" #指数计法,两位小数
i="i have the number{:10d}" #默认右对齐
j="i have the number{:<10d}"
k="i have the number{:^10d}"
print(a.format(34.56))
print(b.format(34.56))
print(c.format(34.56))
print(d.format(34))
print(e.format(34))
print(f.format(34.56))
print(g.format(34.56))
print(h.format(34.56))
print(i.format(34))
print(j.format(34))
print(k.format(34))
i have the number34.56
i have the number+34.56
i have the number35
i have the number34
i have the number34XX
i have the number34.56
i have the number3456.00%
i have the number+3.46E+01
i have the number 34
i have the number34
i have the number 34
可变字符串
用io.StringIO类, 所以可以有以下操作
import io
s="abcdefghi"
sio=io.StringIO(s)
print(sio.getvalue()) #获取可变字符串的value
sio.seek(7) #找到要改的位置, 参数是7,但改的是第8位,而且若输入多位,则原字符串后几位也发生变化
sio.write("tsh")
print(sio.getvalue())
abcdefghi
abcdefgtsh