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

赋值

链式赋值

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

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或0B0,1,10,11,100,101,110,111,……
八进制0o或0O0,12,3,4,5,6,7,10,11,12,13,14,……
十六进制0x或0X0,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),而是生成一个新的对象,如下
    i d : 1599474738864 t y p e : f l o a t v a l u e : 0.3 } 对 象 0.3 \left.\begin{matrix} id:1599474738864\\ type:float\\ value:0.3 \end{matrix}\right\}对象0.3 id:1599474738864type:floatvalue:0.30.3
  2. 浮点数格式的字符串直接转为对应浮点数
  3. 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 :与或非

运算符形式说明
orx or yx为True,直接返回True,不计算y;x为 False,返回y的值
andx and yx为True,返回y的值;x为 False,直接返回False,不计算y
notnot xx为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.141593.142
{ :+ .3f }带符号保留小数点后3位3.14159+3.142
{ : 0>10d}整数右对齐,宽度为10,数字前面用0填充3000000000300
{ : , }以逗号分隔的数字格式100000100,000
{ : .2e}保留两位小数的指数计数法1234561.23e+05
{ : .3% }保留3位小数的百分比格式0.123412.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\quad a=0b11001
    \quad\quad b=0b10100
    \quad\quad bin( c )输出c的二进制形式
操作名称用bin()输出二进制数
a|b按位或(对应位置有一个为1即为1)0b11101
a&b按位与(对应位置相同都为1才为1)0b10000
a^b按位异或(对应位置不同即为1)0b1101

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值