Python学习日记——day2

学习Python的第二天——————————今天主要讲一些昨天没讲的一些数据类型的使用方法跟os还有sys模块的使用方法。

——————————————————————————bytes————————————————————————————

首先是str数据类型。Python中有一种数据类型叫做bytes,顾名思义也就是字节数据类型。那么Python中如何存储bytes数据类型呢

name1 = b"你好,师姐"        #这是bytes数据类型

name2 = "你好,师姐"         #这是str数据类型

如果直接打印name1的话,自然不会打印"你好,师姐"的二进制数据。你以为打印出来你看得懂?

当然,如果你非要看他的二进制Python也不会拦着你,str数据类型提供了encode()方法,使用这种方法可以使用指定的编码方式将str数据类型的对象转换(解码)为bytes数据类型。

name1 = "你好,师姐"        #中文
name2 = "Hello World"      #English
print(type(name1.encode("utf-8")),name1.encode("utf-8"))
print(type(name2.encode("utf-8")),name2.encode("utf-8"))
# 打印结果
# <class 'bytes'> b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe5\xb8\x88\xe5\xa7\x90'
# <class 'bytes'> b'Hello World'

通过上述结果可以

看出一个中文汉字的UTF-8占3个字节,而英文只占一个字节。那么既然有了str为什么还要有bytes呢?

原因很简单,在我们使用str数据类型,一个str数据类型的对象保存在内存里面是按照二进制的方式保存的,你写时Python要给你把str类型的对象解码为二进制数据存进去,而使用时还要将它编码为str类型的对象给你使用,而如果使用bytes的话,Python就省去了给你编码解码的过程(编码解码全由自己操作)

—————————————————————————str——————————————————————————————

扫描二维码关注公众号,回复: 3050698 查看本文章

str数据类型其实跟JAVA里面的String差不多方法也有很多相同的。下面主要介绍str中我觉得比较好玩的一些方法

name = "neil zk"
print(name.center(50,"-"))   
#这个方法特别优美,主要是它能把name里面的字符串打印在50个字节中间,用-填充别的地方
#相当于居中,当然有了居中当然得有左对齐跟右对齐
print(name.ljust(50,"-"))
print(name.rjust(50,"-"))
#打印结果分别为
# ---------------------neil zk----------------------
# neil zk-------------------------------------------
# -------------------------------------------neil zk
print("+".join("1234"))             #结果为1+2+3+4
print("neil_zk".replace("_"," ",1)) #将一个_替换为  ,输出结果为neil zk
print(name.lower())                 #将name全转换为小写
print(name.upper())                 #将name全转换为大写
print(name.isdigit())               #判断name是否全为数字
print(name.isidentifier)            #判断name是否为合法变量名
print(name.find("k"))               #查钊name里面k的位置,并返回

————————————————————————List,Map————————————————————————————

Python里面有列表,元组,字典三个比较特殊的数据类型。其中列表跟元组最大的区别就是元组里的数据不可变,而列表里面的数据是可以修改的

myList = ["001","002",003]        #列表的声明方式使用[]
myTuple= ("001","002",003)        #元组的声明方式使用()
print(myList)                     #['name1', 22, 'name3', 'name4', 'name5']
print(myTuple)                    #('name1', 22, 'name3', 'name4', 'name5')

下面介绍一下List的方法:

一、遍历

#遍历  list与tuple的遍历一样
people = ["小黑",18,99.5,180,18]        #小黑18岁考试平均99.5分,身高180,18厘米
#使用for循环遍历
for i in people:         #for循环遍历的话会换行
    print("->>",i)
print(people [0::1])    #这种方式遍历的话,表示从第0个开始,步数为1
print(people [1:4:1])   #这个表示从第1个开始,到第四个结束(不包括第四个),步数为1
print(people [1:4])     #这个表示从第1个开始,到第四个结束(不包括第四个)
print(people [-4:-1])   #负号表示从右边开始数,但是打印还是从左边开始打印,所以还是左边的位置在前面

"""
打印结果
->> 小黑
->> 18
->> 99.5
->> 180
->> 18
['小黑', 18, 99.5, 180, 18]
[18, 99.5, 180]
[18, 99.5, 180]
[18, 99.5, 180]
"""

二、修改与插入

people = ["小黑",18,99.5,180,18]        #小黑18岁考试平均99.5分,身高180,18厘米
people.append("学生")                   #在最后面添加一个学生的字符串
people.insert(0,"一号")                 #在0号数据前添加一号字符串
people.insert(6,"天津某某大学")          #在6号数据前添加天津某某大学
people[6] = "天津某理工大学"             #将大学名称改一下
print(people)

'''
输出结果
['一号', '小黑', 18, 99.5, 180, 18, '天津某理工大学', '学生']
'''

三、copy

#Python为List提供了好几种copy的方法
import  copy
people = ["小黑",18,99.5,180,["天津","天津某大学"]]        #小黑18岁考试平均99.5分,身高180,18厘米
people1 = people                #只是地址赋值,也就是说people跟people1指向同一块内存
people1[3] = "2222"             #所以当people的值改变了,people1的值也会发生改变,因为是同一个值
print(people1)        #['小黑', 18, 99.5, '2222', ['天津', '天津某大学']]
print(people)         #['小黑', 18, 99.5, '2222', ['天津', '天津某大学']]
people1 = people.copy()         #浅copy,如果里面还有列表的话,只复制内部列表的地址
people1[3] = "3333"             #浅copy解决了只是地址copy的问题,但是浅copy只是复制了第一层
people1[4][0] ="北京"            #也就是说["天津","天津某大学"]这个第二层只是拷贝了地址给people1,people1与people的"天津","天津某大学"是同一个东西
print(people1)                  #['小黑', 18, 99.5, '2222', ['北京', '天津某大学']]
print(people)                   #['小黑', 18, 99.5, '2222', ['北京', '天津某大学']]
people1 = copy.copy(people)     #这个也是浅copy,同样只克隆一层
people1 = people[:]             #这个也是浅copy
people1 = list(people)          #这个也是浅copy
people1 = copy.deepcopy(people) #深copy,全部都copy,解决了浅copy的问题但是很占内存
people1[4][0] = "河北"          #深copy需要导入copy模块,通过调用copy对象中的deepcopy完成操作
print(people1)                  #['小黑', 18, 99.5, '2222', ['河北', '天津某大学']]
print(people)                   #['小黑', 18, 99.5, '2222', ['北京', '天津某大学']]

四、删除操作

people = ["小黑",18,99.5,180,["天津","天津某大学"]]
del people[3]                  #删除第3个
people.pop(1)                  #删除第1个
print(people)
if people.index("小黑")>=0:     #先判断有没有小黑这个字符串,在进行删除
    people.remove("小黑")       #删除名字为小黑的字符串
print(people)
del people                      #直接删除people这个list

'''
['小黑', 99.5, ['天津', '天津某大学']]
[99.5, ['天津', '天津某大学']]
'''

五、其他

# print(people.index("小黑"))
# people.reverse()                   #反转
# print(people)
# # people.clear()                   #清空people列表
# people.sort()                      #排序
# people= ["你好"]
# people.extend(people1)             #把people列表与people1列表合并

最后给大家简单的介绍一下字典的使用。Python里面的字典其实就是java里面的Map,也就是以键-值对的方式存储数据,与list还有tuple不同的是Map使用{}来声明,呵呵,3种括号都用了,我看你以后还怎么拓展,拿命去拓展。。。

myMap = {"101":"Phone",
         "103":"Bike",
         "102":"Watch"}
myMap["101"] = "手机"            #Map可以通过键来找到所对应的值,从而修改值
myMap["105"] = "other"
del myMap["101"]                #也可以用del来删除值
myMap.pop("101")                #用pop()方法来删除值
myMap.popitem()                 #删除最后一个值
print(myMap.get("105"))         #安全的获取方法,如果没有105这个键也不会报错
print("103" in myMap)           #查看是否有103
print(myMap.items())            #字典转换成列表套元组
print(myMap.fromkeys([6,7,8],["ds","xx","ee"]))  #创建一个新字典并返回

print(myMap)

for i in myMap:                 #使用for循环打印Map
    print(i,myMap[i])
for k,v in myMap.items():       #使用for循环打印Map
    print(k,v)

猜你喜欢

转载自blog.csdn.net/qq_38107043/article/details/82350480