文章目录
赋值
链式赋值:同一对象赋值给多个变量
a=b=123
系列解包赋值:
a, b = 1, 2 #a, b之间有空格,operator之间有空格
a, b = b, a
print(a, b)
python不支持常量,即逻辑上不能修改(但实际可以)
MAX_SPEED = 200
print(MAX_SPEED)
MAX_SPEED = 600
print(MAX_SPEED)
最基本内置数据类型
- 整型:整数
- 浮点型:小数
- 布尔型:true,false
- 字符串型:“abc”
整数
二进制:0b或0B (0,1)
八进制:0o或0b (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,f)
用int()实现类型转换:
- 浮点数转为整数,int(9.9)得到的结果为1
- false和true能分别转化成0和1
- 含有字母的字符串无法进行类型转换
整数和浮点数相加时自动转化为浮点数
整数可以有多大?
python 3 中 int 可以存储任意大的整数,long被取消。
浮点数
浮点数用科学计数法表示,例如314E-2或314e-2
类型转化:
- float()可以把其它类型转化为浮点数
- round()可以进行四舍五入
注:不会改变原有值,而是产生新的值
增强型赋值运算符
注:"+="之间不能加空格
时间的表示
"unix"时间点:1970年1月1日00:00:00
python中用time.time()代表当前时间,返回的值是以秒为单位,带微妙(1/1000 毫秒)精度的浮点值(是从当前时间到unix时间点的秒数)
import time
b = time.time()
print(b) #print带有括号
a = int(time.time())
print(a)
total_minute = a//60 #获得整数
print(total_minute)
total_day = a//3600
print(total_day)
practice:绘制折线并计算距离
import turtle
import math
# 定义点坐标
x1, y1 = 100, 50
x2, y2 = 0, 30
x3, y3 = -60, 80
# 绘制折线
turtle.penup()
turtle.goto(x1, y1)
turtle.pendown()
turtle.goto(x2, y2)
turtle.goto(x3, y3)
# 计算距离
distance = math.sqrt((x1-x3)**2+(y1-y3)**2)
turtle.write(distance)
布朗值
布朗值:true和false本质上是1和0
运算符
比较运算符
一个=是赋值,两个=是等于
逻辑运算符
同一运算符(is)
同一运算符用于比较两个对象的存储单元
is与两个=的区别:
is比较对象的地址,两个=用于比较对象的值
is运算符效率比两个=高
整数缓存
python仅对比较小的整数对象进行缓存(范围为[-5,256])→对于该范围的对象,其地址一样
在pycharm中,解释器进行了优化,范围扩大为[-5,任意正整数]
字符串
字符串的本质
字符串的本质:字符序列
python中的字符串是无法改变的
字符串的编码
字符串的编码:python 3支持Unicode,可以表示世界上任何书面语言的字符。
使用内置函数ord()可以把字符转换成对应的Unicode码
使用内置函数chr()可以把十进制数字转换成相应的字符
字符串的创建
引号创建字符串:可以用单引号,也可以用双引号
b = 'I am a "Robot"'
print(b)
I am a "Robot"
空字符串和len()函数
>>>c = ""
>>>len(c)
0
转义字符
转义字符:
字符串拼接
-
使用+将多个字符串联起来。例如“a”+“b” →“ab”
(a) 如果两边都是字符串,则拼接
(b) 如果两边都是数字,则加法运算
© 如果两边类型不同,则出现异常 -
可以将多个字面字符直接放在一起实现拼接如“a” “b”→“ab”
字符串复制
>>>a = 'Sxt'*3
>>>a
'SxtSxtSxt'
不换行打印
print(“a”)默认换行符结尾,等同于print(“a”,end="\n")
print(“aa”,end="")
print(“aa”,end="##")
从控制台读取字符串
>>>myname = input("请输入名字:")
请输入名字:
>>>myname
名字
a = input('请输入名字')
print(a)
str()实现数字转型字符串:
str(5.20)→"5.20"
使用[]提取字符:
字符串的本质是字符序列,我们可以通过在字符串后面添加[],在[]里面指定偏移量,可以提取该位置的单个字符。
正向搜索:
最左侧的第一个字符,偏移量是0,第二个偏移量是1,以此类推。直到len(str)-1为止。
反向搜索:
最右侧的第一个字符,偏移量是-1,倒数第二个偏移量为-2,直到-len(str) 为止
replace实现字符串替换
a.replace(‘c’,‘高’)
整个replace过程中,我们创造了新的字符串对象,而不是修改了以前的字符串
a = "ab高defg"
b = a.replace('高', 'c')
c = len(a)
d = 8
e = True # True首字母大写
print(c == d, end="\\")
print(c == d or e)
print(c, end="\n")
print(a, end="\t") # 出现的还是原本的a,/代表除法,\代表分隔符
print(b, end="*") # 出现的是替换后的字符
字符串切片slice操作
切片slice操作可以让我们快速提取字符,标准格式为:
[起始偏移量:终止偏移量:步长]
a = "abcdefg"
b = a[0:2] # 包头不包尾
print(b)
a = "abcdefg"
b = a[1:4:2] # 包头不包尾
print(b)
c = a[4]
print(c)
操作:
a = "to be or not to be"
b = a[::-1] # 将字符串倒序输出
print(b)
c = "sxtsxtsxtsxtsxt"
d = c[::3] # 将所有的s进行提取
print(d)
split分割和join合并
split可以基于制定分割符将字符串分割成多个子字符串。如若不指定分隔符,则默认使用空白分隔符(换行符、空格、制表符)
a = "to be or not to be"
b = a.split()
c = a.split("be")
print(b)
print(c)
join的作用相反,是将字符串拼接起来。
a = ["a", "b", "c"] #用[]作为子字符串
b = "".join(a) #用()作为字符串表达,并且和split进行区分
print(b)
拼接字符串要点:
不推荐使用"+"来拼接字符串,因为它会生成新的字符串对象,而join会在拼接之前计算字符串长度,然后注意拷贝,仅生成一次对象。
比较+和join的运算效率(尽量避免使用“+”):
import time
time1 = time.time()
a = ""
for i in range(1, 1000000):
a += "sxt"
time2 = time.time()
print("运算时间:"+str(time2-time1))
time3 = time.time()
b = [] #因为是序列,因此在这里使用[]
for i in range(1, 1000000):
b.append("sxt")
time4 = time.time()
print("运算时间:"+str(time4-time3))
字符串驻留
字符串驻留:
仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。对于符合标识符规则的字符串(仅含有_、字母、数字),会启用字符串驻留机制
字符串的比较和同一性
is和not is用来判断是否为同一对象,
!=和==用来判断是否含有相同字符
成员操作符
in/not in作为关键字,判断某个子字符是否在字符串中
a = "aa_66"
b = "aa_66"
print(a is b)
c = "dd#"
d = "dd#"
print(c is d) #为什么在这里会出现true
常用查找方法
去除首尾信息
用strip()除去首尾指定信息
大小写转化
格式排版:
center():居中
ljust():左对齐
rjust():右对齐
其他方法
a = "sxt"
print(a.isalpha())
格式化
format()基本用法
a = "名字是:{0},年龄是{1}, {0}目前还是学生" #注意这里是花括号{}
b = a.format("grace", "18")
print(b)
填充和对齐
:后面带填充的字符
^<>分别代表居中,左对齐,右对齐
结尾如果只有数字,那代表总共的字符宽度(包含空格或符号填充的字符)
结尾如果有数字和d或f或,那在定义字符宽度的同时也规定了填充数字的形式
a = "我的名字是{0:^7},年龄是{1:<2},{0}目前还是学生"
b = a.format("grace", "18")
print(b)
c = "我的名字是{0:^7},喜欢的数字是是{1:#<9}。".format("grace", "888")
print(c)
数字格式化
浮点数通过f,整数通过d进行格式化
a = "我的名字是{0:^7},月收入是{1:.2f}"
b = a.format("grace", 3140) # 不需要对数字使用引号,因为这里的数字是float
print(b)
可变字符串
我们可以使用io.StringIO()对象或者array模块原地修改字符串(无需创建新的字符串对象,但需要写sio = io.StringIO())
import io
s = "hello sxt"
sio = io.StringIO(s) # 使用io.StringIO()
sio.seek(7) # 寻找第七个字符
sio.write("g") # 对第七个字符进行修改
print(sio.getvalue())