python的第五天(复习数据类型)
对于前几天数据类型的补充
1、整形int
a.几种输入的方法
a = 123
a = int(123)
对于当我们在设备上输入a = 123时其实Python内部他们会把他转换为int(123),对于后面的括号在Python的内部其实是调用了__init__
b.int的内部优化
像下面这种情况他们在内存里是共用一块地址的:
n1 = 123
n2 = n1
对于下面这种情况他们在内存里使用不同的地址来存储
n1 = 123
n2 = 123
但是在Python的内部他会把-5----127之间的数做一个优化,认为他们是常用的数字,所以在程序中他们还是会使用同内存地址来存储
c.长度的限制
对于操作系统的不同对于int的长度也不同
32bit -2**31-----------2**31-1
64bit -2**63-----------2**63-1
但是对于Python来说如果我们使用的数超过了int的最大数那么他不会报错,而是会把转换为长整形。也就是会在数字的后面加上l
长整形的范围可以说是无限的大,只要你的内存越大他就越大可以把内存消耗完
2、字符串、str
a.创建方式
s1 = "rasir"
s2 = str("rasir")
b.特有功能,一般需要记住的
s1.strip()----------------------------移除字符串两端的空格
s1.startswith()----------------------查找字符串中,关与自己查找的是否相同
s1.find()-----------------------------查找字符串中某个字符
s1.replace()-------------------------将字符串中某个序列替换成自己想要替换的字符
s1.upper()---------------------------将字符串的所有字母变成大写
s1.isapha()---------------------------查找字符串中是否只有字母如果只有字母则返回True否则返回False
c.公共功能
索引:只能取一个元素
切片:可以取多个元素
编码、for
举例:
temp = "你好"
for i in temp:
print (i)
bytes_list = bytes(i,encoding='utf-8')
print(bytes_list)
for i in bytes_list:
print (i)
print(bin(i))
输出结果:
你
b'\xe4\xbd\xa0'
228
0b11100100
189
0b10111101
160
0b10100000
好
b'\xe5\xa5\xbd'
229
0b11100101
165
0b10100101
189
0b10111101
总结:对于utf-8的编码来说汉字是以三个字节来存储的,并且会以十六进制进行来表现的,而对gbk码是2个字节来存储
对于2.7与3.7版本,在for循环输出汉字的时候,对于2.7的版本是以字节的形式输出的,而对于2.7的版本是以字符的形式输出
从上面的举例可以看出对于for循环的时候会自动把别的进制自动转换成十进制
d. str与Bytes的转换
(1)、将字符串转换为字节:
a = '小白'
n1 = bytes(a ,encoding='utf-8')
n2 = bytes(a ,encoding='gbk')
print(n1)
print(n2)
输出结果:
b'\xe5\xb0\x8f\xe7\x99\xbd'
b'\xd0\xa1\xb0\xd7'
(2)、将字节转换成字符串
a = '小白'
n1 = bytes(a ,encoding='utf-8')
n2 = bytes(a ,encoding='gbk')
new1 = str(n1,encoding="utf-8")
new2 = str(n2 ,encoding='gbk')
print(new1,new2)
输出结果:
小白 小白
总结:Bytes可以强制定义创建字节,也可以用来对其他类型进行转换到字节
Str可以强制定义一个字符串,也可以用来对其他类型的对象转换到字符串
对于汉子utf-8是以三个字节来存储的而GBK是以两个字节来存储的
3、列表:list
a1 = ['cui','rain','sir']----------------创建一个列表
a2 = list()-------------------------------创建一个空的列表
a2 = list(['cui','rain','sir'])
def __init__(self, seq=())---------------------------------------对于转换的对象要是可迭代(可以这么理解可迭代的就是可以for循环的)
(1)、字符串转换成列表
举例:
a = '小白'
a1 = list(a)---------------------------这时的a在括号的内部相当于一个for的循环
print(a1)
输出结果: ['小', '白']
(2)、将元组转换为列表
举例:
a = ('cui','rain','sir')
a1= list(a)----------------------------------------------------for循环,将每一个循环的元素当做列表的元素
print(a1)
输出结果:
['cui', 'rain', 'sir']
(3)、将字典转换为列表
举例:
a = {'rain':'sir',
'yan':'sea'}
a1 = list(a)
a2 = list(a.values())
a3 = list(a.items())
print(a1)
print(a2)
print(a3)
输出结果:
['rain', 'yan']
['sir', 'sea']
[('rain', 'sir'), ('yan', 'sea')]
a、特别的一些列表的功能
a1.clear()---------------------------------------------------------------------清除列表功能
a1.append()-------------------------------------------------------------------追加某个元素
a1.extend()--------------------------------------------------------------------以迭代的方式追加元素
a1.insert()--------------------------------------------------------------------添加元素,在指定的位置添加元素
a1.reverse()-------------------------------------------------------------------将列表反转
b、共有的特性
都可以索引--------------------对于索引索引之后一定是个元素
都可以切片--------------------对于切片如果切片之前是字符那么切片之后也是字符,如果之前是列表那么之后也是列表
都可以for循环
c、嵌套的索引
a1 = ['rain','sir','sea',123,{'aaa':'bbb','ccc':{'ddd':'eee'}}]
a2 = a1[4]["ccc"]['ddd']
4、元祖.tuple
a、创建和转换
a1 = ('cui','rain','sir')
a2 = tuple(a1)---------------------------------也是可以迭代的
a3 = tuple(('cui','rain','sir'))
b、基本特性
count------------------------------------------------统计有多少个元素
index------------------------------------------------查找查个元素并返位置
c、元素不可被修改
a1 = ('cui','rain','sir',['hell','keke'])
print(a1)
a1[3].append('while')
print(a1)
输出结果:
('cui', 'rain', 'sir', ['hell', 'keke'])
('cui', 'rain', 'sir', ['hell', 'keke', 'while'])
总结:对于元祖来说他的元素是不可以被修改,但是他元素内的内容是可以被修改,向上面的举例来说,如果我们想修改元素‘cui’是不可以
重要:一般来说对于字符串在使用一个功能的时候一般不会改变原来的内容,而对于list,tuple,dict来说一般会在原来对象上进行修改
5、字典、dict
a、创建和转换
n1 = {'rain':'sir','tan':'aaa'}
n1 = dict({'rain':'sir','tan':'aaa'})
列表到字符串
a1 = ['rain','sir']
a2 = dict(enumerate(a1))
print(a2)
b、基本的特性
n1.fromkeys()--------------------------------------------------用来创建一个新的字典
如果一个方法的上面有staticmethod这上单词那么这个是用类来调用的,像平常我们一般是用对象来调用方法
举例:
n1 = dict.fromkeys(['k1','k2','k3'],[])
print(n1)
n1["k1"].append('bbb')
print(n1)
输出结果:
{'k1': [], 'k2': [], 'k3': []}
{'k1': ['bbb'], 'k2': ['bbb'], 'k3': ['bbb']}
总的结:
对于fromkeys来说后面所创建的vlan值他们使用的是同一个内存地址。这也就解释了为什么在对于k1的Value值添加之后其他的都添加了
n1.get()--------------------------------------------------------------------------------------------------------------------根据key值来获取Value,与用索引不同的是,如果没有这个key值那么get会给它返回一个空值,而索引不会则会报错,这里的d是默认的填充的值,当vlaue没有时我们可以用默认值来填充