20201222 Python基本数据类型
20201222 Python基本数据类型
- 数据类型介绍
- 数值类型
- 整数int
- 浮点数float
- 复数complex(了解)
- 数学计算
- 布尔类型
- 空值(None)
- 字符串
- 字符串的下标(重点掌握)
- 字符串的切片(重点掌握)
- 字符串类型转换
- 字符串组成方式(掌握)
- 字符串常见操作(熟悉)
- 作业
数据类型介绍
- 数值类型:int 、bool、float、 complex
- 序列类型:
- 不可变:str、tuple、bytes
- 可变:list
- 集合类型:set
- 映射类型:dict
- 数据类型的作用:更好分配管理内存,方便统一管理,更贴近人类分类管理的习惯
数值类型
- Python 支持三种不同的数值类型:整数、浮点数和复数与布尔。
- 数值类型是 不可变 类型。所谓的不可变类型,指的是类型的值一旦有不同了, 那么它就是一个全新的对象。数字1和2分别代表两个不同的对象,对变量重新 赋值一个数字类型,会新建一个数字对象。
整数int
- 整数通常被称为整型,数值为正或者负,不带小数点。表示数字的时候,通常 使用十进制(decimal,满十进一) 来表示。
- 十六进制用0x前缀和0-9,a-f表示,例如:0xff00。python 中使用 hex() 将十进制转为十六 进制
eg: hex(10) --> ‘0xa’ - 八进制用0o前缀和0-7表示,例如0o45。python 中使用 oct() 将十进制转为八进制
eg: oct(10) --> ‘0o12’ - 二进制用0b前缀和0-1表示,例如0b11。python 中使用 bin() 将十进制转为二进制
eg: bin(10) --> ‘0b1010’ - 整数内存:python 的整数长度为32位,并且通常是连续分配内存空间的。
id(1)
Out[6]: 1923706336
id(2)
Out[7]: 1923706368
1923706336 与 1923706368 是连续的,之间是相差32位
- 小整数对象池:
- python 初始化的时候会自动建立一个小整数对象池,方便我们调用,避免后期 重复生成!这是一个包含262个指向整数对象的指针数组,范围是-5到256。也就是说比如整数10,即使我们在程序里没有创建它,其实在 Python 后台创建好了。
- 注意:但是如果超出了-5到256这个范围,python需要另外创建空间,甚至要重复创建。
- 作用:节省开销,增快运行速度
- 整数缓冲区:
- 也就是刚被删除的整数, 不会被真正立刻删除回收,而是在后台缓冲一段时间,等待下一次的可能调用。
- 注意:在交互环境/dos命令当中演示不出来效果。该效果在pycharm当中实现;并且注意不是小整数对象池当中的值。
a = 10000
print(id(a)) #打印a的内存地址# del 变量名 --> 删除对象
del ab = 10000
print(id(b))结果:
2383277690672
2383277690672解析:
a 和 b的地址是一样的,但是其实del 之后, a已经不存在了。
只要你足够快,在规定的时间,a删除之后,并不会立即回收。而是等待一段时间,看是否有相同的调用
有的话,直接调用,超时的话,则销毁所以可以自定义一个时间,操作如下:
import timea = 10000
print(id(a)) del a
time.sleep(10) #规定10s,若超过10s,a的内存地址则消除,10s内创建 b = 10000,则b直接作出相同的调用b = 10000
print(id(b))
浮点数float
- 浮点数也就是小数,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点 数,一般用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者 12.3e8,0.000012可以写成1.2e-5,等等。
- 浮点数与整数之间转换:
eg: float(1) --> 1.0
int (1.5) --> 1 (注意:转化为整数的时候,直接去掉小数部分,与四舍五入无关)
复数complex(了解)
- 复数由 实数部分 和 虚数部分 构成,可以用 a + bj, 或者 complex(a,b) 表示, 复数的 实部a 和 虚部b 都是浮点。
数学计算
- 对于数学计算,除了前面提到过的简单的加减乘除等等,更多的科学计算需要 导入 math 这个标准库,它包含了绝大多数我们可能需要的科学计算函数。
- math.ceil(x) :向上取整,比如4.1 --> 取5
- math.floor(x):向下取整,比如4.5 -->取4
- math.pow(x,y): x**y, 意思就是x的y次幂
- abs(x):取绝对值
- round(x,y):四舍六入五成偶 (重点)y不填的时候,默认取整数。如果填写了y则表示保留多少位小数
在Python3中:如果5进了的话是偶数才进1,向上取整;如果5进了之后是奇数则舍去,向下取整 - 使用上述math计算需要先导入标准库math: import math
布尔类型
- 布尔类型只有两个值, True 与 False
- 注意:首字母必须大写,不能有其它的花式变型。
- 通过 python 内置的 bool() 函数来测试一个表达式的布尔值的结果:
>>> 3 > 1
True
>>> 2 < 1
False
>>> bool(True)
True
>>> bool(False)
False
- 数值类型:0、0.0的 bool 值都为 False,其它的都为 True。
bool(1) #True
bool(-1) #True
bool(0) #False
bool(0.0) #False
- 字符串:空字符串的 bool 值为 False,其它的都为 True。注意空格字符串为 True
bool('yes') #True
bool('') #False
bool(' ') #重点:True
bool('0') #True
- 列表:空列表的 bool 值为False,其它的都为 True。
bool([]) #False
bool([1,2,3]) #True
- None 的 bool 值永远为 False
bool(None) #False
布尔类型运算
- and 运算
- or 运算
- not 运算
- 算术运算。注意:把 True 看作1,而 False 看作 0
True + 1 = 2
False + 0 = 0
Flase + 1 = 1
空值(None)
- 空值不是布尔类型,是 Python 里一个特殊的值,用 None 表示(首字母大写)。
- None 不能理解为0,因为0是整数类型,而 None 是一个特殊的值。
- None 也不是 布尔类型,而是 NoneType。
type(None)
>>>NoneTypeNone == 0
>>>FalseNone == ''
>>>FalseNone == []
>>>False
字符串
- 使用单引号或双引号来创建字符串, 使用三引号创建多行字符串。
使用单引号和双引号时,如果需要换行则加\n,如果需要打印\n,则写\\n
"hello \n hansen"
'hello \n hansen'三引号则可以保留文本的样式,可以自由换行,甚至自由书写,不需要添加换行符等其他特殊操作
'''hello
world
'''
- 字符串的单引号与双引号都是 成对 出现的,不能一边单一边双。
- 字符串是 不可变 的 序列数据类型,不能直接修改字符串本身,和数 字类型一样!
- 字符串存储方式:整数 在内存中占 一个字节,字符串 不管中间多少内容都要 单独存储。
字符串的下标(重点掌握)
- 由于字符串是 序列数据结构 ,所以我们可以通过 下标 将字符串中某个字母取出来。 下标也可称为索引,默认从0开始。(注意:空格也算)
name = "hello oldamy"name[1]
>>>'e'name[11]
>>>'y'name[-1] #-1意思就是倒数第一个位置
>>>'y'name[12] #如果选择的位置超出了范围,则会报错
>>>IndexError: string index out of rangename[4] #下表索引并不能重新赋值,已经是固定好的,不可变
>>>'o'
name[4] = 'l'
>>>'str' object does not support item assignment
字符串的切片(重点掌握)
注意:
- 索引默认从0开始
- 切片时左闭右开
- 当是取单个字符的时候,索引超出范围会报错。而切片时不会报错。
- 步长不能为0,也不允许为浮点数
思考: name = “hello oldamy ” ,如何取出 oldamy , hloodm 值?name 逆序输出?1.取出oldamy
name = 'hello oldamy'name[6:11]
>>>'oldam'name[6:12] #左闭右开
>>>'oldamy' name[6:]
>>>'oldamy'name[:] #只有冒号不填写,则代表取全部
>>>'hello oldamy'2.取出hloodm
name[::2]
>>>'hloodm'3.逆序输出
name[::-1]
>>>'ymadlo olleh'
字符串类型转换
int('1')
>>> 1int('a')
>>>错误,a不符合转化为整数int(1.0)
>>> 1int('1.0') #注意:将字符串转化为整数的时候,并不能识别字符串里面的符号,比如里面的句号
>>> invalid literal for int() with base 10:'1.0'
字符串组成方式(掌握)
- 字符串相加
'1'+'2' = 12 #字符串用+来进行拼接!
- 字符串格式化
例子:
name = 'wulala'
age = 13
输入 **的年龄为**1. %号格式
# %s --> str
# %d --> decimal 十进制的数值
# %f --> float
print('%s年龄为%d'%(name,age))
弊端:%号格式需要考虑数据类型2.str.format(),用花括号{}填坑
print('{}年龄为{}'.format(name,age))
#format可以调换顺序
print('{1}年龄为{0}'.format(age,name)) #age位置为0,name位置为1
好处:str.format不用考虑数据类型,可以切换位置3.f格式,也是用花括号{}占坑
print(f'{name}年龄为{name})
注意:只适用于python3.6.4以上版本
字符串常见操作(熟悉)
- S.find(sub) --> 返回该元素最小的索引
注意:返回类型为ints1 = 'hello python'
print(s1.find('o'))
结果:4 返回最小的索引,一共有两个o,返回最小的oprint(s1.rfind('o'))
结果:10 一般搜索都是默认从左到右,如果想要从右开始搜索,用rfindprint(s1.find('c'))
结果:-1 当搜索不存在的子字符串时,不会报错,只会显示-1
- S.index(sub) --> 返回该元素最小的索引, 与S.find(sub) 的区别在于搜索不存在的子字符串时,S.index(sub)会报错
print(s1.find('c'))
结果:ValueError: substring not found
- S.replace(old, new[, count]) --> 替换
s2 = 'hello oldoldamy'
#将old --> beautiful
print(s2.replace('old','beautiful'))
结果:hello beautifulbeautifulamy 如果没有标明次数,则默认全部替换print(s2.replace('old','beautiful',1)) 通过count指定替换次数
结果:hello beautifuloldamy 替换一次,替换第一个print(s2)
结果:hello oldoldamy
再次print s2的时候显示的是原始的字符串,是因为S.replace这个作用是拷贝字符串,并不改变字符串本身
- S.split(sep=None) --> 以sep来分割字符串,并返回列表。sep默认为None,分割默认为空格
s3 = 'hello everybody yeyeye!'
#以空格将三个单词进行拆分为列表元素
print(s3.split(' '))
结果:['hello', 'everybody', 'yeyeye!'] 以空格字符串进行分割,空格字符串会消失,返回为列表#以'e'进行拆分为列表元素
print(s3.split('e'))
结果:['h', 'llo', 'v', 'rybody y', 'y', 'y', '!']
- S.startswith(prefix[, start[, end]]) --> 判断字符串是否以前缀开始,返回为bool值。
s4 = 'verycool'print(s4.startwith('ver'))
结果:Trueprint(s4.startwith('verx'))
结果:False
- S.endswith(suffix[, start[, end]]) --> 判断字符串是否以尾缀结束,返回为bool值。
s4 = 'verycool'print(s4.endwith('ool'))
结果:Trueprint(s4.startwith('yool'))
结果:False
- S.lower() --> 将字符串全部转为小写
- S.upper() --> 将字符串全部转为大写
s5 = 'n'
print(s5.upper())
结果:Ns6 = 'N'
print(s6.lower())
结果:n拓展:链式调用
print(s5.upper().lower())
结果:n
- S.strip([chars]) --> 默认去掉字符串左右的空格
s7 = ' go to work '
print(s7.strip())
结果:go to work
注意:只会去掉首尾的空格,并不会去掉中间的空格#如果想要去掉中间的空格,可以用replace
print(s7.replace(' ',''))
结果:gotowork
- S.isalpha() --> 判断字符串是否全为字母,返回的是bool值
- S.isdigit() --> 判断字符串是否全为数字,返回的是bool值
- S.isalnum() --> 判断字符串是否全为数字或者字母,不存在特殊字符,返回的是bool值
- S.join(iterable) --> 将序列中的元素以指定的字符连接生成一个新的字符串
s8 = 'hello'#实现:'h e l l o'
拓展:字符串序列是可迭代的(iteralbe),意思就是元素可以一个个取出来
print(' '.join('s8'))
结果:h e l l o lst = ['hello', 'world']
#实现:hello world
print('',join(lst))
结果:hello world
作业
- 答案:
write = (input('请打印:'))if write == 'y' or write == 'Y':print('进入卸载')
elif write == 'n' or write == 'N':print('退出程序')
else:print('不在选项范围之内')
2. 答案:上述笔记
3. 答案:
#字符串逆序
name = 'todayisgoodday'
print(name[::-1])
结果:yaddoogsiyadot#字符串统计
name = 'todayisgoodday'
print(len(name))
结果:14设计的程序:
write = str(input('请输入字符串:'))if len(write) < 20:print(len(write))print(write[::-1])
else:print('请重新输入')
4. 答案:34
20201222 Python基本数据类型相关推荐
- Python的零基础超详细讲解(第四天)-Python的数据类型
Python 基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型&q ...
- python的数据类型和变量
python的数据类型和变量 数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种 ...
- python核心数据类型_Python核心数据类型-列表
Python核心数据类型-列表 关于列表的重要属性 列表是任意对象的有序集合,列表中可以包含任何种类的对象,数字 字符串 或者是其他列表 列表可以通过偏移来读取其中的元素,也可以通过分片读取列表中的某 ...
- python判断数据类型type_Python 判断数据类型有type和isinstance
Python 判断数据类型有type和isinstance 基本区别在于: type():不会认为子类是父类 isinstance():会认为子类是父类类型 执行结果如下: 用isinstance判断 ...
- Python基础数据类型之set集合
Python基础数据类型之set集合 一.set数据类型介绍 二.set集合演示 三.set集合中hash介绍 1.哈希定义 2.数据类型的hash和不可hash 3.set中hash示例 四.set ...
- Python基础数据类型之字符串(二)
Python基础数据类型之字符串(二) 一.字符串的常规操作 二.字符串的大小写转换 1.首字母大写 2. 每个单词首字母大写 3.大写转化为小写 4.所有字母变成大写字母 二.验证码忽略大小写 三. ...
- Python基础数据类型之字符串(一)
Python基础数据类型之字符串(一) 一.字符串格式化 1.字符串占位符 2.字符串格式化操作 二.f-string格式化 三.字符串的索引 四.字符串的切片 1.常规切片使用方法 3.步长的介绍 ...
- 好好学python·基本数据类型
好好学Python的第一天 基本用法 注释 输出 变量 命名规范 变量的定义方式 python的数据类型 数据类型分类 字符串类型 数字类型 List列表类型 tuple 元组类型的定义 Dict字典 ...
- python元组类型_什么是python元组数据类型
什么是python元组数据类型 发布时间:2020-08-25 11:46:29 来源:亿速云 阅读:68 这篇文章运用简单易懂的例子给大家介绍什么是python元组数据类型,代码非常详细,感兴趣的小 ...
最新文章
- python高效 二分法查找
- 前端一HTML:十五: 层叠,权重,优先级的关系
- 未来的数据中心(三)
- js获取网页当前页面及路径
- @transactional注解失效情况
- 使用Lambda在AWS云上使用Java
- 再看数据库——(2)视图
- 产业链人士:LCD显示驱动芯片价格有望趋于稳定
- 演示如何利用log4net记录程序日志信息
- SpringMVC设置不拦截静态资源css,js
- LINUX下载编译nasm
- 软件质量保证与测试(秦航第二版)第一章软件质量和测试的背景
- Mac ffmpeg推流记录
- Qt 自定义ExpandableGroup
- 把手机上的新浪微博客户端卸载了
- 刘晓艳老师的考研单词记忆
- OpenCV每日函数 WeChat QR 微信二维码检测器
- IBM FlashSystem掌控现代存储,靠的是硬实力
- android 阻尼回弹,Android ListView实现阻尼回弹效果 并去除边缘阴影
- 用犯罪分析软件CrimeStat做热点图、层次空间聚类图、时空移动平均图