python基础数据类型


一、为什么会有数据类型?

  • 更好地分配管理内存
  • 方便统一管理
  • 更贴近人类分类管理习惯

二、数据类型种类

  • 数值类型:int、bool、float、complex
  • 序列类型:

    • 不可变:str、tuple、bytes
    • 可变:list
  • 映射类型:dict
  • 集合类型:set

三、数据类型

1.数值类型:

数值类型是不可变的类型。
所谓不可变,是指类型的值有了变化,那么将会是一个全新的对象。比如1和2分别代表一个对象。
python支持三种不同的数值类型:

  • 整数
  • 浮点数
  • 复数
    当然,布尔类型也可以理解为数值类型的一种。
整数(int):

整数通常被称为整型,数值为正或为负,不带小数点。通常用十进制来表示。
也可以使用其他进制表示:
· 十六进制用0x作为前缀和0-9-a-f来表示,。也可以使用hex()方法来转换。如0xad1hex(123)
· 八进制用0o作为前缀和0-7来表示。也可以使用cot()来进行转换。
· 二进制使用0b作为前缀和0-1来表示。也可以使用bin()来进行转换

内存使用

python的整数长度为32位,并且通常是连续分配内存空间的。
例如:

print(id(1))#==>1707765216
print(id(2))#==>1707765248

这两个数的内存地址正好相差32。

小整数对象池

python初始化的时候会自动创建一个小整数对象池,方便我们调用,避免后面重复生成。
这是一个包含了262个指向整数对象的指针数组,范围是-5到256。
也就是说,这262个数值,即使我们在程序里没有创建它,python在后台也悄悄为我们创建了。
这个对象池的作用是,节省开销,增快运行速度。

注意

pycharm中对于对象的删除并不会立即回收,而是等待一段时间,看是否有相同的调用,有的话就直接调用,没有的话超时就直接销毁。
如果实在命令行,或是其他开发环境,则没有或是可能没有缓冲。对于对象删除后就立即回收。

import time
a=1000000
print(id(a))#==>2387445390672
del a
b=1000000
print(id(b))#==>2387445390672
print(id(c))
浮点数(float):

浮点数也就是小数,如1.23,3.14等等。
对于很大的或者很小的浮点数,一般采用科学计数法。把10用e代替,如1.23*10^9就记为1.23e9。

数据的转换

浮点数——>整数:float(需要转换的整数)
整数——>浮点数:int(需要转换的浮点数)


需要注意的是,整数转换为浮点数,是直接取数值的整数部分。舍弃小数部分。
复数(complex):

复数是由实数部分和虚数部分构成,可以用a+bj,或者complex(a,b)表示。
复数的实部a与虚部b都是浮点。

数值计算:
函数名作用
math.ceil(i)对数值i向上取整
math.floor(i)对数值i向下取整
math.pow(x, y)计算x的y次幂,等价于x**y
abs(i)对数值i取绝对值
round(i)对数值i四舍六入五取偶数
布尔类型(bool)和空值(None):

但在python语言中,布尔类型只有两个值,True与False。
空值None是一个特殊存在,空值不等于0。

注意:

首字母必须大写,不能有其他的花式变型。

bool()的使用
  • 在数值中,非0或非0.0都为True。0和0.0为False。
  • 在列表中,非空列表都为Treu,空列表为False。
  • 在字符串中,除了空字符串为False,其他都为True。需要注意的是,空格字符串不是空字符串,也返回True。
  • None(空值)的返回值永远为False。
bool类型运算符
  • and运算
  • or运算
  • not运算
  • 算术运算,注意:把True当1,False当0

2.字符串类型:

在python中,字符串的存储方式和数组类似,字符串中的每一个值都有与之对应的下标,下标编号从0开始。
示例:

str="刀剑神域"
print(str[0])#==>刀
print(str[2])#==>神
print(str[-1])#==>域
print(str[-3])#==>剑
切片:

在python中,可以对字符串进行切片操作。其格式为:
str[起始下标:结束下标]
示例:

str="刀剑神域"
print(str[0:3])#==>刀剑神
print(str[1:3])#==>剑神
print(str[2:])#==>神域
print(str[:2])#==>刀剑
print(str[0::3])#==>刀域
"""切片操作同样支持用负值,但需要遵循从左往右取的准则"""
print(str[-3:-1])#==>剑神

切片操作还可以根据步长切片。其格式为:
str[起始下标:结束下标:步长]
示例:

str="刀剑神域"
print(str[0:3:2])#==>刀神
"""python支持步长用负值"""
"""步长为负时会逆向输出"""
print(str[3:0:-1])#==>域神剑
print(str[3:0:-2])#==>域剑
print(str[3::-1])#==>域神剑刀
print(str[3::-2])#==>域剑
#需要注意的是,采用步长切片同样支持用负值,但需要遵循从左往右取的准则
a="刀剑神域刀剑神域"
print(a[-1:3:-2]+a[-1])
注意:
  • 索引默认从0开始
  • 切片时左闭右开
  • 当是取单个字符的时候,索引超出范围会报错。而切片时不会报错。
  • 步长不能为0,也不允许为浮点数
  • 即使是使用负数进行切片,顺序也要遵从从左往右的顺序。
字符串组成:
字符串相加

在python中,字符串之间可以通过+进行连接。
示例:

a="刀剑"
b="神域"
print(a+b)#==>输出的内容为:刀剑神域
字符串格式化
  • %s%d%f
  • str.format()
  • python3.6.4 引入f''
    示例:
name="kirito"
age=16
print("你的名字是%s,你的年龄是%d"%(name,age))
print("你的名字是{},你的年龄是{}".format(name,age))
字符串常见方法
  • str.find(sub) --> 返回该元素最小的索引
  • str.index(sub) --> 返回该元素最小的索引
  • str.replace(old, new[, count]) --> 替换
  • str.split(sep=None) --> 以sep来分割字符串,并返回列表。sep默认为None,分割默认为空格
  • str.startswith(prefix[, start[, end]]) --> 判断字符串是否以前缀开始,返回为bool值。
  • str.endswith(suffix[, start[, end]]) --> 判断字符串是否以尾缀结束,返回为bool值。
  • str.lower() --> 将字符串全部转为小写
  • str.upper() --> 将字符串全部转为大写
  • str.strip([chars]) --> 默认去掉字符串左右的空格
  • str.isalpha() --> 判断字符串是否全为字母,返回的是bool值
  • str.isdigit() --> 判断字符串是否全为数字,返回的是bool值
  • str.isalnum() --> 判断字符串是否全为数字或者字母,不存在特殊字符,返回的是bool值
  • str.join(iterable) --> 将序列中的元素以指定的字符连接生成一个新的字符串

部分详情,请见我的另一篇博文:链接

四、问题:

问题一:

当输入y或者Y的时候打印进入卸载,当输入n或N的时候打印退出程序,其他情况则打印输入不在选项范围你之内。

回答:
写法一:

ins=input("Please enter the instruction:")
if ins == "y" or ins == "Y":
    print("进入卸载")
elif ins == "n" or ins == 'N':
    print("退出程序")
else:
    print("输入不在选项范围之内!")

写法二:

ins=input("请输入指令:")
print('进入卸载' if ins=='y' or ins=='Y' else "退出程序" if ins=='n' or ins=='N' else "输入不在选项范围之内")
问题二:

完成字符串的逆序以及统计
设计一个程序,要求只能输入长度低于20的字符串,当满足需求时,则打印出字符串长度以及使用切片逆序打印出字符串,当不满足需求时,打印用户重新输入。

回答:
写法一:

ins=input("Please enter the string(len<20):")
if len(ins)<20:
    print(ins[::-1])
else:
    print("用户重新输入")

写法二:

ins=input("Please enter the string(len<20):")
print(ins[::-1] if len(ins)<20 else "用户重新输入")
问题三:

‘3’+‘4’的结果是什么?

回答:
结果是字符串类型的34.因为3和4都是字符串,使用+号的时候不做数值运算,而是作为文本连接符使用。



声明:一代明君的小屋|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - python基础数据类型


欢迎来到我的小屋