|
数据类型
Number - 数字类型
数字类型包含int,float,bool,complex类型
int - 整型
- # type(variable) 可以查看变量的类型
- # id(variable) 可以查看变量的地址
- age = 18
- res = type(int) # int
- res_id = id(age) # 返回内存地址
- # 二进制整型
- intvar = 0b110
- print(type(intvar)) # int
- print(id(intvar))
- # 8进制整型
- intvar = 0o127
- print(type(intvar)) # int 87
- print(id(intvar))
- # 16进制整型
- intvar = 0xff
- print(type(intvar)) # 255
- print(id(intvar))
复制代码 float - 浮点型
- # 小数
- floatvar = 6.7
- print(type(intvar)) # float
- print(id(intvar))
- # 科学计数法
- floatvar = 5.7e5 # 小数点右移
- floatvar = 5.7e-2 # 小数点左移
- print(floatvar,type(floatvar))
复制代码 bool - 布尔类型
- boolvar = True
- boolvar = False
复制代码 complex - 复数
- # 实数+叙述
- complexvar = 3 + 4j
- complexvar = -5j
- # 可以使用complex函数创建复数
- res = complex(3,4) # 3+4j
复制代码 String - 字符串
String类型也是一种容器类型
字符串定义
- # 单引号
- strvar = 'The sky is blue'
- # 双引号
- strvar = "The sky is blue"
- # 三引号 - 支持跨行效果
- strvar = '''The sky is blue'''
复制代码 转义字符
将无意义字符转变为有意义的字符,将有意义的字符转变为无意义的字符
- \t - 制表符缩进
- \n - 换行
- \r - 将当前行中\r后面的字符拉倒当前行的行首
有意义的字符转变为无意义字符- # 在双引号内使用双引号,使用转义字符取消内部双引号的意义
- print("生活不止眼前的苟且还有诗和"远"方")
复制代码 python中单引号字符串和双引号字符串是没有区别的
元字符串
- r"字符串"- 将字符串原样输出,忽略转义字符的效果
- strvar = "python\today" # \t会转义
- strvar = r"python\today" # r会将字符串原样输出
复制代码 字符串格式化输出
使用占位符,进行字符串的输出
- %d - 整型占位符
- %f - 浮点型占位符
- %s - 字符串
- name = "Evan"
- age = 8
- # 方式1
- print("%s今年%d岁了" % (name,age)) // Evan今年8岁了
- # %2d - 表示占两位数字
- print("%s今年%2d岁了" % (name,age)) // Evan今年 8岁了 中间有一个空格,数字之前补空格
- # %-2d - 表示占两位数字,不够的用空格补,数字之后补空格
- print("%s今年%-2d岁了" % (name,age))
- # %f
- strvar = "这个牙刷%f元" % (9.5)
- # %.2f - 保留两位小数
- strvar = "%s真好吃" % ("苹果")
- # 占位符可以用在一个字符串中
- print("%s超时,%s%f%d斤" %("大润发","苹果",9.9,1))
复制代码 list - 列表类型
列表是容器类的数据,可以存储不同数据的类型
定义列表
- # 空列表
- list = []
- listvar = [98,6,9,"jack",True] // 存储不同类型的数据
复制代码 索引
- lis = ["jack","kk","pp","hahaha"]
- res = lis[0]
- # len(容器类型) - 获取元素的个数
- print(len(ls)) # 4
- # 获取列表中的最后一个元素
- print(lis[len(lis)-1]) # len(list)-1 返回列表最后一个元素
- print(lis[-1])
复制代码 数组操作
- # 修改列表中的元素
- lis = [2,5,6,7]
- lis[3] = "jack" # 通过索引找到元素,将该内容修改
复制代码 tuple - 元组类型
- # 定义一个元素元组,加,
- tu = (1,)
- # 定义元组
- tu = ("jack","Evan","kk")
- # 元组元素的索引从0开始
- print(tu[0]) # jack
复制代码元组中的元素可以获取但是是不可修改的,有序
字符串类型
- 字符串也是一个容器类型,其中只能存储字符,空格和标点都是字符
- 字符串的索引从0开始
- strvar = "Hello World"
- print(strvar[0]) # H
复制代码字符串中的字符可以获取但是不可以更改
set - 集合类型
- 集合可以进行交差并补运算
- 集合数无序
- 集合元素是唯一的,自动去重
- 集合中的元素不可通过索引进行获取
- 集合中的元素是不可修改的
- # 定义空集合
- setvar = set() # 只有这种方式可以创建空集合
- setvar = {"巨石强森","乔丹","施瓦辛格","史泰龙"}
复制代码 字典
- # 定义空字典
- dictvar = {}
- dictvar = {
- "篮球":"乔丹",
- "足球":"梅西",
- "NFL":"布雷迪"
- }
- # 获取集合中的元素通过key value的形式找到值
- print(dictvar["篮球"]) # 乔丹
- # 修改字典中的值
- dictvar["篮球"] = "Kobe"
复制代码 set和dict中的注意事项
字典的键 和 集合的值 有数据类型上的要求:
(允许的类型范围)不可变的类型: Number(int float complex bool) str tuple
(不允许的类型)可变的类型 : list set dict
哈希算法的提出目的是让数据尽量均匀的在内存当中分配,以减少哈希碰撞,提升存储分配的效率;
哈希算法一定是无序的散列,所以集合 和 字典都是无序
- 数据在内存中随机存储,速度快,但是容易出现哈希碰撞,为了解决哈希碰撞,提高存储效率
字典的键有要求,值没要求;字典的值可以任意换掉,但是键不可以.
3.6版本之前,完全无序,
3.6版本之后,存储的时候,保留了字典定义的字面顺序,在获取内存中数据时
重新按照字面顺序做了排序,所以看起来有序,实际上存储时还是无序.
变量的缓存机制(在同一个文件中)
针对于3.6版本的机制,3.8版本,只要值相同,内存地址就相同
整型
对于整型而言,-5~正无穷范围内的相同值 id一致- # 1.对于整型而言,-5~正无穷范围内的相同值 id一致
- var1 = 5
- var2 = 5
- var1 = -100
- var2 = -100
- print(id(var1) , id(var2) )
复制代码
浮点型
对于浮点数而言,非负数范围内的相同值 id一致- # 2.对于浮点数而言,非负数范围内的相同值 id一致
- var1 = 4.67
- var2 = 4.67
- var1 = -4.67
- var2 = -4.67
- print(id(var1) , id(var2) )
复制代码 布尔类型
布尔值而言,值相同情况下,id一致- # 3.布尔值而言,值相同情况下,id一致
- var1 = True
- var2 = True
- print(id(var1) , id(var2) )
复制代码 复数
复数在 实数+虚数 这样的结构中永不相同(只有虚数的情况例外)- # 4.复数在 实数+虚数 这样的结构中永不相同(只有虚数的情况例外)
- var1 = 4 +5j
- var2 = 4 +5j
- # 5j 情况下例外
- var1 = 5j
- var2 = 5j # 相同
- var1 = -5j # 不同
- var2 = -5j
- print(id(var1) ,id(var2))
复制代码 容器类型
字符串 和 空元组 相同的情况下,地址相同
列表,元组,字典,集合无论什么情况 id标识都不同 [空元组例外]- # 5.字符串 和 空元组 相同的情况下,地址相同
- var1 = "你"
- var2 = "你"
- var1 = ()
- var2 = ()
- print(id(var1) ,id(var2))
- # 6.列表,元组,字典,集合无论什么情况 id标识都不同 [空元组例外]
- var1 = (1,2)
- var2 = (1,2)
- var1 = [1,2,3]
- var2 = [1,2,3]
- print(id(var1) ,id(var2))
复制代码 小数据池
小数据池只针对int str bool 空元组() None关键字,这些数据类型有效
int类型
不同文件(模块),部分数据会驻留在小数据池中,在解释器进行编译脚本的时候,内存会提前开辟一些空间进行保存,-5-256,不同文件定义在这个范围内的数据,默认使用小数据池中的数据,不重新开辟空间
使用cmd命令行执行python,一行表示一个文件
字符串类型
- s1 = " "
- s2 = " "
- print(s1 is s2) # True
复制代码
- 字符串长度>1,且只含大小写字母,数字,下划线,默认驻留小数据池
- s1 = "oldboy__good666__"
- s2 = "oldboy__good666__"
- print(s1 is s2) # True
复制代码- # 乘数等于1,无论什么字符串*1,都默认驻留小数据池
- a = "ssjfajflajlj"
- b = a*1
- print(a is b) # True
- # 乘数大于1时,仅包含数字\字母\下划线时会被缓存,但字符串长度不能大于20
- qq = "sssssda" * 10
- QQ = "sssssda" * 10
- print(qq is QQ) # False
复制代码 指定驻留
使用sys模块中的intern函数,指定变量指向同一个内存地址
可以指定任意字符串加入到小数据池中,无论声明多少变量,只要此值相同,都指向同一个地址空间
- # 从sys模块引入intern函数,让a,b两个变量指向同一个值
- from sys import intern
- a = intern("jack"*10)
- b = intern("jack"*10)
- print(a is b)
复制代码 无论是变量缓存机制还是小数据池的驻留机制,
都是为了节省内存空间,提升代码效率
来源:https://www.cnblogs.com/Icer-newer/p/17133376.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|