2020-11-24

链式赋值

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

转义字符

  • \+特殊字符表示转意
    在这里插入图片描述

字符串的拼接

形成一个新的字符串

  1. 可以用加号(必须保证两边都是字符串)
  2. 可以直接将字符串放在一起
#字符串的拼接
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值