Day2 python 的基本数据类型及操作
contents
赋值
链式赋值
把同一个对象赋值给多个变量(把同一个对象的地址给了多个变量)
a=b=12
系列解包赋值
系列数据赋值给相同数量的变量
a,b,c=1,2,3
可用于一步实现变量交换(区别C语言需要的中间变量)
a,b,c=c,a,b
#a=3,b=1,c=2
常量
python不支持常量(常量,即不改变的量)
只能逻辑上不对其修改
note: 用大写字母表示!!
最基本的python内置数据类型
类型 | 举例 |
---|---|
整型 | 整数 |
浮点型 | 小数 |
布尔型 | True、False |
字符串型 | ‘’python‘’ |
整数
python3的整数可以任意大小,不会造成“整数溢出”。
python除十进制还有二进制,8进制和十六进制(运用于位运算中)。
进制 | 转二进制 | 0~20 |
---|---|---|
二进制 | 0b或0B | 0,1,10,11,100,101,110,111,…… |
八进制 | 0o或0O | 0,12,3,4,5,6,7,10,11,12,13,14,…… |
十六进制 | 0x或0X | 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10,11 |
int()
1.浮点数直接去掉小数部分
2.int(True)=1,int(False)=0
3.整数格式的字符串直接转为对应整数
浮点数
float()
- float(3)运算完,原来的对象3并没有改变(原来的对象3详见https://blog.csdn.net/little_yueyue/article/details/107307453),而是生成一个新的对象,如下
- 浮点数格式的字符串直接转为对应浮点数
- round()四舍五入为整数,note:round()产生新的对象,不改变原有值
数据的运算
基本运算
运算:+(加),-(减),*(乘),/(除),//(整数),%(取余),**(幂)
divmod()方法,可同时得到商和余数,返回一个元组
divmod(13,3)
#(4,1)
增强型赋值运算符
+=,-=,-=,*=,/=,//=,**=,%=,<<=,>>=,&=,|=,^=
note:两运算符之间不能加空格
自动转型
整数和浮点数的混合运算,自动转为对应浮点数
时间
unix时间点:1970年1月1日 00:00:00
从这个时间点以毫秒(1/1000秒)进行计算
通过time.time()获取当前时刻,
import time
time.time()
返回值以秒为单位,微秒(1/1000毫秒)为精度的浮点值
布尔值
python: True False
本质就是1,0,完全可以当做数字来使用
比较运算符
==(不等于),!=(不等于),<,<=,>,>=
逻辑运算符
and or not :与或非
运算符 | 形式 | 说明 |
---|---|---|
or | x or y | x为True,直接返回True,不计算y;x为 False,返回y的值 |
and | x and y | x为True,返回y的值;x为 False,直接返回False,不计算y |
not | not x | x为True,返回False;x为 False,返回True |
a=True
b=False
a or 30 #x为True,返回True
#True
b or 30 #x为 False,返回y
#30
a or 30/0 #30/0未被运算,如运算,会报错
#True
同一运算符
运算符 | 说明 | 比较对象 |
---|---|---|
is 和 is | 判断两个变量的引用对象是否为同一个对象 | 比较对象的地址,不需调用方法,直接比较,效率更高 |
==和!= | 判断两个变量的引用对象的值是否为相等 | 比较对象的值,默认调用对象的__eq__()方法 |
a=1000
b=1000
a==b
#True
a is b #比较的是两个变量的id,id(a)=2045025626672,id(b)=2045025626160
#False
note:整数缓存问题
python仅对较小的整数对象(范围为[-5,256])直接进行缓存来使用
a=5
b=5
a is b
#True
但是保存为文件或者在pycharm中,解释器做了优化,范围变为[-5,任意整数]
字符串
- 字符串的本质是字符序列,字符串、整型、浮点型,元组是不可变的,如果要改变就只能创建一个新的字符串对象。
- python中字符串是一个基本数据类型,是没有单字符这个类型的,单字符也是作为一个字符串使用的。
- Python3支持Unicode,可表示任何书面语言的字符,python3中默认是16位(65536)的Unicode编码。ASCII码(8位,可表示256个字符)
内置函数 | 作用 |
---|---|
ord() | 把单个字符转Unicode码 |
chr() | 把十进制数转成对应字符 |
创建字符串
- 可用单引号、双引号,字符串中用了单引号的,就用双引号,反之则相反
- 创建多行字符串时,用三个单引号或者三个双引号,里面可用单引号和单引号
- python允许空字符串的存在(不是空格)
c=''
len(c)
#0
转义字符
\+特殊字符,来实现某些难以用字符表示的效果,如换行。用print()打印,可以显示出效果。
转义字符 | 描述 |
---|---|
\ | 续行符 |
\\ | 反斜杠符号 |
\’ | 单引号 |
\" | 双引号 |
\b | 退格 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
print('续行符是续行\
不是换行')
#续行符是续行不是换行
print("""三个引号换行
是真的换行""")
#三个引号换行
#是真的换行
字符串拼接
用加号拼接 | 结果 | 示例 |
---|---|---|
字符串+字符串(也可不加+号) | 直接拼接 | ‘1’+‘1’ ==>‘11’ |
数字+数字(注意是数字不是‘1’这种字符串) | 加法运算 | 1+1==>2 |
列表+列表 | 列表合并 | [1,2,3]+[4,5,6]==>[1,2,3,4,5,6] |
+号两边类型不同 | 抛出异常 | error |
字符串复制
‘字符串’*复制次数
a='six'*3
a
#sixsixsix
[1,2,3]*3
#[1, 2, 3, 1, 2, 3, 1, 2, 3]
不换行打印
调用print()时会在结尾自动打印一个换行符,若不想换行,则修改参数end=‘’任意字符串‘’
print('six')
print('six',end='')
print('sixsix')
#six
#sixsixsix
从控制台读取字符串
input()
转字符串
str()
str(True)
#'True'
str(3.14e2)
#'314.0'
[]提取字符
正向从0开始,反向从-1开始
replace()实现字符串替换
字符串.replace('被替换的部分’,‘替换的部分’)
note: 返回一个生成的是新的字符串,而不是修改以前的字符串,原字符串不变,
**a='1234567'
a.replace('34','d')
#12d567
a
#'1234567'
字符串的slice操作
[start : end : step]
note:包头不包尾,可用负数
切片操作时,start<负的字符串长度时,会被当做0,end>=字符串长度时,会被当做-1
a='abcdefg'
a[-2:] #可用负数索引
#'fg'
a[::-1] #返回一个逆序排列
#'gfedcba'
a[-100:100] #可用负数索引
#abcdefg'
字符串的分割和合并
split()按指定的分隔符将字符串分割,默认使用空白字符(换行符,空格和制表符),返回列表
join()用指定字符串将一系列子字符串连接起来,即split()的逆过程,返回字符串
note: join()比+更效率,因为每次用一个+就会生成一个新对象,而join()的整个过程,会在拼接前计算所有字符串,故仅新建一次对象。
a='i am an engineer!\n'
a.split()
#['i', 'am', 'an', 'engineer!']
b=['i', 'am', 'an', 'engineer!']
' '.join(b)
#'i am an engineer!'
字符串驻留机制和字符串比较
字符串驻留:仅保存一份不可变字符串的方法,不同的值被存放在字符串驻留池中
a='csdn_is_great'
b='csdn_is_great'
a is b #查看a和b是否指向同一个id,即比较地址是否相同
#True
符合标识符规则的字符串(仅包含下划线,字母和数字)会启用字符串驻留机制
#不符合标识符规则时
a='csdn##'
b='csdn##'
a is b #查看a和b是否指向同一个id
#False
从而,我们 可用==和!=比较变量引用对象的值,is和is not比较变量引用对象的地址
成员操作符
in和not in 判断某个字符串是否在字符串中
b='csdn##'
'##' in b
#True
常用字符串的方法
note:以下方法都是返回一个新的对象,没有改变原字符串对象
字符串示例1
a=“学好算法不容易,码好代码不简单,想想毕业有工作,有啥不能好好学,早日年薪过百万,有房有车有帅哥!”
方法和示例 | 说明 | 结果 |
---|---|---|
len(a) | 字符串长度 | 48 |
a.startswith(‘学好’) | 以指定字符串开头 | True |
a.endswith(‘帅哥!’) | 以指定字符串结尾 | True |
a.find(‘不’) | 第一次出现指定字符串的位置(从左边开始搜索) | 4 |
a.rfind(‘不’) | 最后一次出现指定字符串的位置(从右边开始搜索) | 26 |
a.count(‘有’) | 指定字符串出现的次数 | 5 |
a.isalnum() | 所有字符串全是字母或数字 | False |
字符串示例2
a=’**一起去爬山**’
方法和示例 | 说明 | 结果 |
---|---|---|
a.strip() | 去除首尾指定信息,默认去除空白符 | ‘**一起去爬山**’ |
a.strip(’*’) | 去除首尾指定信息 | ‘一起去爬山’ |
a.lstrip(’*’) | 去除最左边指定信息 | ‘一起去爬山**’ |
a.rstrip(’*’) | 去除最右边指定信息 | ‘**一起去爬山’ |
字符串示例3
a=‘If I stick to blogging on CSDN, it will make me progress.’
方法和示例 | 说明 | 结果 |
---|---|---|
a.capitalize() | 产生首字母大写的新字符串 | ‘If i stick to blogging on csdn, it will make me progress.’ |
a.title() | 产生每个单词都字母大写的新字符串 | ‘If I Stick To Blogging On Csdn, It Will Make Me Progress.’ |
a.upper() | 产生所有字符都大写的新字符串 | ‘IF I STICK TO BLOGGING ON CSDN, IT WILL MAKE ME PROGRESS.’ |
a.lower() | 产生所有字符都小写的新字符串 | ‘if i stick to blogging on csdn, it will make me progress.’ |
a.swapcase() | 使所有字母大小写发生转换的字符串 | ‘iF i STICK TO BLOGGING ON csdn, IT WILL MAKE ME PROGRESS.’ |
字符串示例4
a=‘six’
方法和示例 | 说明 | 结果 |
---|---|---|
a.center(10) | 字符串居中,默认空白字符填补空缺 | ’ six ’ |
a.center(10,’*’) | 字符串居中,并以指定字符填补空缺 | ‘***six****’ |
a.ljust(10,’*’) | 字符串左对齐,并以指定字符填补空缺 | ‘six*******’ |
a.rjust(10,’*’) | 字符串右对齐,并以指定字符填补空缺 | ‘*******six’ |
其他方法
方法和示例 | 说明 |
---|---|
a.isalpha() | 检查字符串是否只由字母组成(含汉字) |
a.isdigit() | 检查字符串是否只由数字组成 |
a.isspace() | 检测是否为空白符 |
a.isupper() | 检测是字母否全为大写 |
a.islower() | 检测是字母否全为小写 |
字符串的格式化
str.format()
format函数通过{}先占位,可以接受不限个参数,位置可不按顺序
可通过索引号标识参数(要注意顺序)
a='他的名字是{0},今年{1}岁,{0}可壮实了'
a.format('猪','26')
#'他的名字是猪,今年26岁,猪可壮实了'
可通过参数名标识参数(不必注意顺序)
a='他的名字是{name},今年{age}岁,{name}可壮实了'
a.format(name='猪',age='26')
#'他的名字是猪,今年26岁,猪可壮实了'
填充和对齐
符号 | 说明 |
---|---|
^ | 居中 |
< | 左对齐 |
> | 右对齐 |
^,<,>后面带宽度
:后面带填充字符,只能是一个字符,默认是用空格填充
a='他的名字是{0:宝<3},今年{1:^10}岁,{2:6>5}啊!'
a.format('猪','26','可以')
#'他的名字是猪宝宝,今年 26 岁,666可以啊!'
数字的格式化
浮点数通过f,正整数通过d格式化
格式 | 描述 | 数字 | 输出 |
---|---|---|---|
{ : .3f } | 保留小数点后3位 | 3.14159 | 3.142 |
{ :+ .3f } | 带符号保留小数点后3位 | 3.14159 | +3.142 |
{ : 0>10d} | 整数右对齐,宽度为10,数字前面用0填充 | 300 | 0000000300 |
{ : , } | 以逗号分隔的数字格式 | 100000 | 100,000 |
{ : .2e} | 保留两位小数的指数计数法 | 123456 | 1.23e+05 |
{ : .3% } | 保留3位小数的百分比格式 | 0.1234 | 12.340% |
可变字符串
有时候确实需要修改字符串中的内容,可使用io.StringIO对象或array模块
import io #导入io模块
s='sixsixsix'
sio=io.StringIO(s) #生成可变字符串
sio
#<_io.StringIO at 0x1dc24aa0678>
#下面开始修改字符串
sio.seek(6) #从索引为6的位置开始修改
#6
sio.write('6666')#返回修改几个位置
#4
sio.getvalue()#返回变量的值
#'sixsix6666'
运算符补充和总结
- 比较运算符可连用
a=3
1<a<5
#True
- 位操作
示例1:
a=0b11001
b=0b10100
bin( c )输出c的二进制形式
操作 | 名称 | 用bin()输出二进制数 |
---|---|---|
a|b | 按位或(对应位置有一个为1即为1) | 0b11101 |
a&b | 按位与(对应位置相同都为1才为1) | 0b10000 |
a^b | 按位异或(对应位置不同即为1) | 0b1101 |
示例2
a=7
bin(a)=111
操作 | 名称 | 用bin()输出二进制数 | 说明 |
---|---|---|---|
<<1 | 左移,后跟数字 | 1110 | 每左移一维就相当于多乘一个2 |
>>1 | 右移,后跟数字 | 11 | 每左移一维就相当于除以2取整 |
- 复杂运算一定要加小括号
乘除>加减
位运算和算术运算>比较运算>赋值运算
本文地址:https://blog.csdn.net/little_yueyue/article/details/107320078