编码方式 集合 深浅拷贝 文件操作

今天主要学习内容如下:

1.Python2和python3的不同点

# python2
#
# print 'shs'
# xrange()
# raw_input()
#
# python3
# print('shj')
# input()
# range()
View Code

2.小数据池概念和is与==的不同

# is 比较的是内存地址(即id)
# ==比较的是值是否相等

# a = 1
# b = a
# print(a == b)
# print(id(a) == id(b))
##数字,字符串 小数据池
#数字的范围 -5 -- 256
#字符串:1,不能有特殊字符
# 2,s*20 还是同一个地址,s*21以后都是两个地址
#
# a = 300
# b = 300
# print(a == b)
# print(id(a) is  id(b))
# print(id(a),id(b))

# a = 'ssgd#d'
# b = 'ssgd#d'
# print(a is b)

#剩下的 list dict tuple set 没有小数据池的概念,都是2个内存地址
a = [1,2]
b = [1,2]
print(a is b)
View Code

3.编码方式

ascii
A : 00000010 8位 一个字节

unicode A : 00000000 00000001 00000010 00000100 32位 四个字节
中:00000000 00000001 00000010 00000110 32位 四个字节


utf-8 A : 00100000 8位 一个字节
中 : 00000001 00000010 00000110 24位 三个字节


gbk A : 00000110 8位 一个字节
中 : 00000010 00000110 16位 两个字节
1,各个编码之间的二进制,是不能互相识别的,会产生乱码。
2,文件的储存,传输,不能是unicode(只能是utf-8 utf-16 gbk,gb2312,asciid等)

python3的编码方式
    str 在内存中是用unicode编码。
bytes类型
对于英文:
str :表现形式:s = 'alex'
编码方式: 010101010 unicode
bytes :表现形式:s = b'alex'
编码方式: 000101010 utf-8 gbk。。。。

对于中文:
str :表现形式:s = '中国'
编码方式: 010101010 unicode
bytes :表现形式:s = b'xe91e91e01e21e31e32'
编码方式: 000101010 utf-8 gbk。。。。

# # 编码方式python3
# s1 = 'shang'
# s2 = b'shang'
# print(type(s1),type(s2))#<class 'str'> <class 'bytes'>

s1 = ''
# s2 = b'上'
# print(type(s1),type(s2))
print(type(s1))
print(s1.encode('gbk'))
print(s1.encode('utf-8'))
View Code

4.做了2道练习题

#
# 1、元素分类
#     有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
# 即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
#
# dic = {'key1':[],'key2':[]}
# li=[11,22,33,44,55,66,77,88,99,90]
# for i in li:
#     if i<=66:
#         dic['key1'].append(i)
#     else:
#         dic['key2'].append(i)
# print(dic)
#


# 2、输出商品列表,用户输入序号,显示用户选中的商品
#     商品 li = ["手机", "电脑", '鼠标垫', '游艇']
# 要求:1:页面显示 序号 + 商品名称,如:
#           1 手机
#            2 电脑
#
#      2: 用户输入选择的商品序号,然后打印商品名称
#   3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
# 4:用户输入Q或者q,退出程序。

print('欢迎光临,商品如下')
li = ["手机", "电脑", '鼠标垫', '游艇']
s=[]
for index,name in enumerate(li):
    print(str(index) + '     '+name)
while 1:

    num = input('请输入要购买的商品编号:')
    if num == 'q' or num=='Q':

        break
    elif int(num) >= 0 and int(num) <= len(li):
        s.append(li[int(num)])
        for i in s:
            print('已购买'+'        '+i)

    else:
        print('输入有误,请重新输入')
View Code

 5.集合set的增删改查

#集合:可变的数据类型,他里面的元素必须是不可变的数据类型,无序,不重复。

# set = {1,2,3}
# set = {1,[1,23]}#TypeError: unhashable type: 'list'
# set = {'name','jsh','djdf','jd'}
#
# #增,删
# set.add('sdd')
# print(set)
# set.update('sdhhh')#{'jsh', 'h', 's', 'd', 'jd', 'djdf', 'name', 'sdd'}
# print(set)
# print(set.pop())#随机删除
# print(set.clear())
# print(set)
# del set
# # print(set)
# # set.clear()
# # print(set)
#
#
# #集合的交集,并集,反交集,差集
# s1={1,2,3,4,5}
# s2={2,3,4,5,6}
# print(s1&s2)
# print(s1.intersection(s2))
# print(s1|s2)
# print(s1.union(s2))
# print(s1^s2)
# print(s1.symmetric_difference(s2))
# print(s1-s2)
# print(s1.difference((s2)))
# print(s1 < s2)
# print(s1.issubset(s2))  # 这两个相同,都是说明set1是set2子集。
#
# print(s2 > s1)
# print(s2.issuperset(s1))
#  这两个相同,都是说明set2是set1超集。


#利用集合去重
li = [1,22,3,34,4,4,5,5,5,7,8]
s=set(li)
# print(s)
# print(list(s))


# frozenset不可变集合,让集合变成不可变类型。
s1=frozenset(s)
# print(s1,type(s1))
# for i in s1:
#     print(i)
# # s1.add(5)
# # print(s)
View Code

 6.基础数据类型汇总

# str

# s=' '
# print(s.isspace())

# list

# li = [1,2,2,3,4,5,6]
# # print(len(li))
# # for i in li:
# #     print(i)
# # for i in range(len(li)):
# #     del li[i]
#
# print(li.index(5))

# # Python 字典 fromkeys() 函数用于创建一个新字典
# # dic = {'1':'sss','2':'slss','3':'kss','4':'psss'}
# dic = dict.fromkeys([1,2,3],'春哥')
# print(dic)#{1: '春哥', 2: '春哥', 3: '春哥'}
#



# # dic = {'1':'sss','2':'slss','3':'kss','4':'psss'}
# dic = dict.fromkeys([1,2,3],[])
# dic[1].append(5)
# # # # # dic[1]=5
# # # dic[2].extend('ghh6')
# # dic[3].extend('ghh6')
# print(dic)
#

# l1 = []
# l2 = l1
# l3 = l1
# l3.append('a')
# print(l1,l2,l3)
#
# #
# dic = {'k1':'v1','k2':'v2','a3':'v3'}
# # dic1 = {}
#
# for i in dic:
#     if 'k' not in i:
#         # dic1.setdefault(i,dic[i])
#         dic1[i]=dic[i]
#
# dic = dic1
# print(dic)

#元祖  如果元祖里面只有一个元素且不加,那此元素是什么类型,就是什么类型。
# tu1 = (1)
# tu2 = (1,)
# print(tu1,type(tu1))1 <class 'int'>
# print(tu2,type(tu2))(1,) <class 'tuple'>
#
View Code

7.深浅拷贝

#对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

# l1 = [1,2,3,['sf','hdfd']]
# l2 = l1
# l1[0] = 11
# print(l1,l2)
#

#浅拷贝copy。对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
# l1 = [1,2,3,['sf',['hdfd','hh']]]
# l2 = l1.copy()
# # print(l1,l2,id(l1),id(l2))
# # l1[0] = 11
# # print(l1,l2,id(l1),id(l2))
# # # l1[3][1] = 'dd'
# # # print(l1,l2,id(l1),id(l2))
# l1[3][1][0]= 'dd'
# print(l1,l2,id(l1),id(l2))

# 深拷贝deepcopy。对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
import copy
l1 = [1,2,3,['sf',['hdfd','hh']]]
l2 =copy.deepcopy(l1)
# print(l1,l2,id(l1),id(l2))
# l1[0] = 11
# print(l1,l2,id(l1),id(l2))
l1[3][1] = 'dd'
print(l1,l2,id(l1),id(l2))
# l1[3][1][0]= 'dd'
# print(l1,l2,id(l1),id(l2))
View Code

8.文件操作

以什么编码方式储存的文件,就以什么编码打开进行操作。

# f = open(r'c:usersSZLIBDesktops.txt',mode='r',encoding='utf-8')
# content = f.read()
# print(content)
# f.close()

# f = open('dfsfs',mode='r',encoding='utf-8')
# content = f.read()
# print(content,type(content))
# f.close()

# f = open('dfsfs',mode='rb')
# content = f.read()
# print(content,type(content))
# f.close()

# f = open('chun',mode='w',encoding='utf-8')
# f.write('dgdgdgd')
# f.close()


# f = open('ch',mode='w')
# f.write('dgdg')
# f.close()

f = open('un',mode='wb')
f.write('dgdd'.encode('utf-8'))
f.close()
View Code



原文地址:https://www.cnblogs.com/shangchunhong/p/9212615.html