• 小数据池


    先介绍一些编码:

    ascii      不支持中文
    gbk        支持中文   2个字节   包含ascii码
    unicode    万国码     python3 内存unicode
    utf-8      可变的长   英文 1 字节  欧洲2个字节  亚洲3个字节
    1 s = '乔狗'
    2 a = '乔二狗_sb'
    s1 = s.encode('utf-8')       # 编码    编码集
    print(s1)      编码        # b'xe4xb9x94xe7x8bx97'
    print(s1.decode('utf-8'))   解码  # 乔狗 
    a1 = a.encode('utf-8')   
    print(a1) # b'xe4xb9x94xe4xbax8cxe7x8bx97_sb'
    s2 = s.encode('gbk')
    print(s2) # b'xc7xc7xb9xb7'
    a2 = a.encode('gbk')
    print(a2) # b'xc7xc7xb6xfexb9xb7_sb'
    s1 = s.encode('utf-8')      # 编码
    print(s1.decode('gbk'))      # 解码

    列举一个错误的示范
    s3 = s.encode('utf-8')
    print(s3.decode('gbk')) # 这是一个错误示范,用什么编码,就用什么解码!

       应用场景: 文件操作 网络传输 网络编程

       坑1:

    1 li = [12,2,3,4,5]
    2 for i in li:
    3     li.append(i)
    4     print(li)
    5 print(li)

    # 会循环着把列表添加到li中,死循环

       坑2:

    1 li = [12,2,3,4,5]
    2 for i in li:
    3     li.remove(i)
    4 print(li)                           # 结果[2,4]
    1 for i in li:
    2     li.pop()
    3 print(li)              # [12, 2]
    1 for i in li:
    2     del li[-1]
    3 print(li)            # [1, 2]

    # 不能这样循环的删除列表中的内容,删不干净

    正确的操作:

    1.

    1 for i in range(len(li)):     
    2     li.pop()
    3 print(li)

    2.

    li = [1,2,3,4,5]             
    li1 = []
    for i in li:
        li1.append(i)
    for j in li1:
        li.remove(j)
    print(li)

    # 准备一个空的列表,遍历li列表,把每一个元素添加到li1中

    # 遍历li1,用li列表去删除所遍历li1中的内容,这样就能删除干净  

    1 for i in li:
    2     li.clear()                 
    3 print(li)

    # 偷鸡方法,正式场合不推荐使用

    删除字典中元素:

    1 dic = {'1':22,'2':'22'}
    2 lst = []
    3 for i in dic:
    4     lst.append(i)           # 每个字典的键
    5 for j in lst:
    6     dic.pop(j)
    7 print(dic)

    # 通过遍历字典,向列表添加字典的键

    # 遍历列表,用字典去删除列表中的键,达到删除字典的效果

     深浅拷贝:

    浅拷贝:

    1 li = [1,2,3,4]
    2 lst = li.copy()
    3 print(li)
    4 print(lst)

    只拷贝表面,深层不考虑

    两个id不同

    1 li[0] = 56
    2 print(li)   #
    3 print(lst)  # 不变

    列表中第一项改变为56

    li此时不再指向1,而是56,所以改变

    lst由于拷贝,所指向还是1,所以不改变

    1 li = [1,2,3,4,[5,6,7]]    # 浅拷贝只拷贝一层元素
    2 lst = li.copy()
    3 print(li)
    4 print(lst)
    5 li[-1].append(90)
    6 print(li)   #
    7 print(lst)  #

    li里面的最后一项是可变数据,所以添加一项后,两个列表都改变数据

     深拷贝:

     1 import copy
     2 li = [1,2,3,4,[5,6,7]]
     3 lst = copy.deepcopy(li)   # 深拷贝
     4 # 浅拷贝只拷贝第一层元素,元素是不可变的,就不会变 元素是可变的俩个同时变
     5 print(li)
     6 print(lst)
     7 print(id(li))      # 40289984
     8 print(id(lst))     # 40305368
     9 li[-1].append(90)
    10 print(li)   #
    11 print(lst)  # 不变

    深拷贝:除了表面一样,内在也拷过来

    拷贝的内容相当于另开辟了一块空间,所以各种各的,两个列表的指向不同

    拓展:
    1 li = [1,2]           # li = [1,[1,[1,[1,2]]]]
    2 li[1] = li
    3 print(li)
    4 #  结果 [1, [...]]

    每次都会把li这个列表作为第二项,相当于制造了循环

       is 和 == 的区别:

    ==  比较两边的值            
    is 比较两边的内存地址
    代码块:
    代码块机制:
    数字: -5 ~ 256
    字符串: 乘法的时候总长度不能超过20
    代码块 > 小数据
     
     
     
     
  • 相关阅读:
    Java中的transient关键字
    【笔记】html的改变(上)
    《开发板 — 实现看门狗》
    《头文件导致Symbol xxx multiply defined重复定义问题分析和解决》
    《APP读取按键值》
    《补充 — Linux内核device结构体分析(转)》
    《设备树LED模板驱动程序》
    《C库 — 字符串和整型数相互转换函数atoi和itoa》
    《Ubuntu — rsync命令》
    《Ubuntu — 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别》
  • 原文地址:https://www.cnblogs.com/53Dawns/p/10235338.html
Copyright © 2020-2023  润新知