第四课 基础数据类型
导读-知识点
为什么会有数据类型?(了解)
1. 更好分配管理内存
2. 方便统一管理
3. 更贴近人类分类管理习惯
数据类型种类
数值类型: int、bool float、complex
序列类型: 不可变:str、tuple、bytes 可变:list
集合类型: set
映射类型: dict
一、数值类型
1.1、数值类型介绍(要求:熟悉)
数值类型是 不可变 类型。
所谓的不可变类型,指的是类型的值一旦有不同了, 那么它就是一个全新的对象。
数字1和2分别代表两个不同的对象,对变量重新 赋值一个数字类型,会新建一个数字对象。
还是要强调一下 Python 的变量和数据类型的关系,变量只是对某个对象的引 用或者说代号、名字、调用等等,变量本身没有数据类型的概念 。
只有1,[1, 2],"hello"这一类对象才具有数据类型的概念。
Python 支持三种不同的数值类型:整数、浮点数和复数与布尔。
1.2、整数(int)(要求:熟悉)
整数(int)介绍
整数通常被称为整型,数值为正或者负,不带小数点。
表示数字的时候,通常 使用十进制(decimal) 来表示。
有时我们还会用八进制或十六进制来表示(了解):
十六进制用0x前缀和0-9,a-f表示,例如:0xff00。python 中使用 hex() 将十进制转为十六 进制
八进制用0o前缀和0-7表示,例如0o45。
python 中使用 oct() 将十进制转为八进制
二进制用0b前缀和0-1表示,例如0b11。
python 中使用 bin() 将十进制转为二进制
1.3、整数内存(要求:了解)
python 的整数长度为32位,并且通常是连续分配内存空间的。
从下面代码的内存地址看,之间正好相差32。
1.4、小整数对象池(要求:了解)
python 初始化的时候会自动建立一个小整数对象池,方便我们调用,避免后期 重复生成!
这是一个包含262个指向整数对象的指针数组,范围是-5到256。也就是说比如整数10,即使我们在程序里没有创建它,其实在 Python 后台已经悄悄为我们创建了。
作用:节省开销,增快运行速度
1.5、整数缓冲区(要求:了解)
除了小整数对象池,Python 还有整数缓冲区的概念,也就是刚被删除的整数, 不会被真正立刻删除回收,而是在后台缓冲一段时间,等待下一次的可能调用。
个人理解:相当于回收站
注意:在交互环境当中演示不出来效果。该效果在pycharm当中实现;并且注 意不是小整数对象池当中的值。
1.6、浮点数(float)介绍(要求:熟悉)
浮点数也就是小数,如1.23,3.14,-9.01,等等。
但是对于很大或很小的浮点 数,一般用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者 12.3e8,0.000012可以写成1.2e-5,等等。
1.7、浮点数与整数之间转换(要求:掌握)
示例:
1.7、复数(complex)(要求:了解)
复数由实数部分和虚数部分 构成,可以用 a + bj, 或者 complex(a,b) 表示, 复数的 实部a和虚部b 都是浮点。
1.8、数学计算(要求:熟悉)
数学计算,除了前面提到过的简单的加减乘除等等,更多的科学计算需要导入 math 这个标准库,它包含了绝大多数我们可能需要的科学计算函数。
math.ceil(x)
math.floor(x)
math.pow(x)
abs(x)
round(x)
python环境下
#导入内置标准库math
>>>import math
1.8.1、math.ceil(x)
释义:ceil(天花板)
用途:向上取整,
示例:
注意:正数和负数的区别
1.8.2、math.floor(x)
释义:floor(地板)
用途:向下取整
示例:
1.8.3、math.pow(x)
释义:pow(power operation,幂运算)
用途:返回 X**Y,X的Y次幂。
示例:
1.8.4、abs(x)
释义:abs(absolute,绝对的)
用途:取绝对值
注意:正数和负数取绝对值的结果
1.8.5、round(x)
释义:round (rounding,舍去)
用途:四舍五入。
在python3 中,对round进行了改良。
注意:四舍六入五成偶是否进,取决于进后的数字是奇数还是偶数,如果是奇数舍去,如果是偶数就进。
二、布尔类型
2.1、布尔类型介绍(要求:掌握)
1、布尔类型( bool)
2、布尔类型只有两个值,false 和 true。
3、通常用来判断条件是否成立。
4、如果变量值为 0 就是 false,否则为 true,布尔变量只有这两个值。
注意:首字母必须大写,不能有其它的花式变型。
示例:
2.2、bool()使用
我们通过 python 内置的 bool() 函数来测试一个表达式的布尔值的结果。
示例:
2.3、布尔类型归纳
数值类型:0、0.0的 bool 值都为 False,其它的都为 True
字符串:空字符串的 bool 值为 False,其它的都为 True。
注意空格字符串为 True
列表:空列表的 bool 值为False,其它的都为 True。
None 的 bool 值永远为 False
示例:
注意:
bool(" ") #空格的bool() ,返回值为True。
2.4、布尔类型运算
布尔类型运算如下:
and 运算
or 运算
not 运算
算术运算
注意:把 True 看作1,而 False 看作 0
(1)、and(逻辑与)运算 可以对符号两侧的值进⾏与运算。只有在符号两侧的值都为True时,才会返回True,只要有⼀个False就返回False。
与运算是找False的,如果第⼀个值为False,则不再看第⼆个值。
示例:
(2)、or运算(逻辑或)两个值中只要有⼀个True,就会返回True 或运算是找True的
示例:
三、空值(None)
3.1空值介绍(要求:掌握)
空值不是布尔类型,是 Python 里一个特殊的值,用 None 表示(首字母大写)。
None 不能理解为0,因为0是整数类型,而 None 是一个特殊的值。None 也不是 布尔类型,而是 “NoneType”
四、字符串类型
4.1、字符串(str) 介绍(要求:掌握)
字符串是由数字、字⺟、下划线组成的⼀串字符。
字符串是 Python 中最常用的数据类型之一,使用单引号或双引号来创建字符串, 使用三引号创建多行字符串。
==注意:
字符串的单引号与双引号都是成对 出现的,不能一边单一边双。 ‘ ’ ,“ ” ,
字符串是 不可变 的 序列数据类型,不能直接修改字符串本身,和数字类型一样!
字符串起始位不能为数字=n
换行符\n,如需打印\n,–> \n
4.2、字符串的存储(要求:了解)
整数在内存中占 一个字节,字符串不管中间多少内容都要单独存储。
答:存储不一样。整数存储只占用一个字节,字符串存储按位单独存储。
4.3、字符串的下标(重点掌握)
由于字符串是 序列数据结构 ,所以我们可以通过 下标 将字符串中某个字母取出来。 下标也可称为 索引,默认从0开始。
示例:
思考:1、取字符串最后一位
2、字符串索引错误
当索引下标超过字符串个数时,系统会提示“超出索引范围”
3、不可赋值
不可以对字符串索引进行赋值。
4.4、字符串切片(要求:重点掌握)
使用的函数(内置):
slice(start,stop[,step])
切片模式:a[start:stop:step]
思考:
name = “hello oldamy”,如何取出 oldamy ? hloodm 值?
name 逆序输出?
示例:
虽然oldamy下标为6-11,但是遵循左闭右开的原则,右边的下标应取12。区别于字符串的索引。
其他方法:
延申:
name = “hello oldamy”,如何取出 hloodm 值?
示例:
关键点:步长的选择(2)
name = “hello oldamy”, name 逆序输出?
示例:步长的选择(-1,逆序输出)
注意:
索引默认从0开始
切片时左闭右开
当是取单个字符的时候,索引超出范围会报错。
而切片时不会报错。
步长不能为0,也不允许为浮点数
4.5、字符串类型转换(要求:熟练掌握)
字符串转为整数:
str–>int int(x)–>integer
示例:
>>> int("1")
1
>>> int("a")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'a'
>>> int(1.0)
1
>>> int("1.0")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1.0'
1、数字字符串可以转换为整数;
2、字母字符串不可以转换;
3、浮点数可以转换为整数;
4、带小数点的字符串不能转换,系统无法识别。
整数转为字符串:
int -->str str(object=’’) --> str
4.6、字符串组成方式(掌握)
字符串相加
字符串格式化
字符串:%s ;整数:%d ;浮点数:%f ;
str.format()
python3.6.4 引入 f’’
示例:
name = ‘hansen’
age = 20
输出 ** 的年龄为 **
方法一:
>>>name = "hansen"
>>>age = 20
>>>print("%s年龄为%d"%(name, age)
弊端:%格式需要考虑数据类型。
方法二:
>>>#str.format()
>>>print("{}年龄为{}".format(name,age))
>>>print("{1}年龄为{0}".format(age,name))
>>>print(f"{name}年龄为{age}")
# f'' 适合python3.6.4以上的版本
4.7、字符串常见操作(完善中)
4.7.1、S.find(sub)
用途:返回该元素最小的索引
操作方法:
4.7.2、S.index(sub)
用途:返回该元素最小的索引
操作方法:
4.7.3、S.replace(old, new[, count])
用途: 替换
操作方法:
4.7.4、S.split(sep=None)
用途: 以sep来分割字符串,并返回列表。sep默认为None,分割默认为空格
操作方法:
4.7.5、S.startswith(prefix[, start[, end]])
用途:判断字符串是否以前缀开始,返回为bool值。
操作方法:
4.7.6、S.endswith(suffix[, start[, end]])
用途:判断字符串是否以尾缀结束,返回为bool值。
操作方法:
4.7.7、S.lower()
用途:将字符串全部转为小写
操作方法:
4.7.8、S.upper()
用途:将字符串全部转为大写
操作方法:
4.7.9、S.strip([chars])
用途:默认去掉字符串左右的空格
操作方法:
4.7.10、S.isalpha()
用途: 判断字符串是否全为字母,返回的是bool值
操作方法:
4.7.11、S.isdigit()
用途:判断字符串是否全为数字,返回的是bool值
操作方法:
4.7.12、S.isalnum()
用途:判断字符串是否全为数字或者字母,不存在特殊字符,返回的是bool值
操作方法:
4.7.13、S.join(iterable)
用途:将序列中的元素以指定的字符连接生成一个新的字符串
操作方法: