欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Day2 python 的基本数据类型及操作

程序员文章站 2022-05-21 12:18:36
这里写目录标题赋值链式赋值系列解包赋值常量最基本的python内置数据类型整数int()浮点数float()数据的运算基本运算增强型赋值运算符自动转型时间布尔值比较运算符逻辑运算符同一运算符字符串创建字符串转义字符字符串拼接字符串复制不换号打印从控制台读取字符串转字符串[]提取字符replace()实现字符串替换字符串的slice操作字符串的分割和合并字符串驻留机制和字符串比较成员操作符常用字符串的方法字符串的格式化填充和对齐数字的格式化赋值链式赋值把同一个对象赋值给多个变量(把同一个对象的地址给了多...

赋值

链式赋值

把同一个对象赋值给多个变量(把同一个对象的地址给了多个变量)

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()

  1. float(3)运算完,原来的对象3并没有改变(原来的对象3详见https://blog.csdn.net/little_yueyue/article/details/107307453),而是生成一个新的对象,如下
    id:1599474738864type:floatvalue:0.3}0.3\left.\begin{matrix} id:1599474738864\\ type:float\\ value:0.3 \end{matrix}\right\}对象0.3
  2. 浮点数格式的字符串直接转为对应浮点数
  3. round()四舍五入为整数,note:round()产生新的对象,不改变原有值

数据的运算

基本运算

运算:+(加),-(减),*(乘),/(除),//(整数),%(取余),**(幂)
divmod()方法,可同时得到商和余数,返回一个元组

divmod(13,3)
#(4,1)

增强型赋值运算符

+=,-=,-=,*=,/=,//=,**=,%=,<<=,>>=,&=,|=,^=
note:两运算符之间不能加空格

自动转型

整数和浮点数的混合运算,自动转为对应浮点数

时间

unix时间点:1970年1月1日 00:00:00
从这个时间点以毫秒(1/1000秒)进行计算
Day2 python 的基本数据类型及操作
通过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,任意整数]

字符串

  1. 字符串的本质是字符序列字符串、整型、浮点型,元组是不可变的,如果要改变就只能创建一个新的字符串对象。
  2. python中字符串是一个基本数据类型,是没有单字符这个类型的,单字符也是作为一个字符串使用的。
  3. Python3支持Unicode,可表示任何书面语言的字符,python3中默认是16位(65536)的Unicode编码。ASCII码(8位,可表示256个字符)
内置函数 作用
ord() 单个字符转Unicode码
chr() 把十进制数转成对应字符

创建字符串

  1. 可用单引号、双引号,字符串中用了单引号的,就用双引号,反之则相反
  2. 创建多行字符串时,用三个单引号或者三个双引号,里面可用单引号和单引号
  3. 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) 字符串居中,默认空白字符填补空缺 \quad six\quad
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'

运算符补充和总结

  1. 比较运算符可连用
a=3
1<a<5
#True
  1. 位操作
    示例1:
    \quad\quada=0b11001
    \quad\quadb=0b10100
    \quad\quadbin( c )输出c的二进制形式
操作 名称 用bin()输出二进制数
a|b 按位或(对应位置有一个为1即为1) 0b11101
a&b 按位与(对应位置相同都为1才为1) 0b10000
a^b 按位异或(对应位置不同即为1) 0b1101

\quad\quad示例2
\qquad\qquada=7
\qquad\qquadbin(a)=111

操作 名称 用bin()输出二进制数 说明
<<1 左移,后跟数字 1110 每左移一维就相当于多乘一个2
>>1 右移,后跟数字 11 每左移一维就相当于除以2取整
  1. 复杂运算一定要加小括号
    乘除>加减
    位运算和算术运算>比较运算>赋值运算

本文地址:https://blog.csdn.net/little_yueyue/article/details/107320078