zoukankan      html  css  js  c++  java
  • day-3 小知识点补充 编码 集合 文件及函数初识

    1. 小知识点的补充

    ==数值比较

    is比较两边的内存地址

    id获取内存地址

    小数据池str int,公用一个内存,目的节省内存空间。

    要求:A. int范围是-5到256,指向一个地址空间

    B. str: 1.不能含有特殊字符

         2.单个元素乘以数字不能超过21

    2. 编码

    字符:看到内容的最小单位。比如:

          abc:a一个字符

          中国:中

    Ascii码:1个字节,字母,数字,特殊字符

    Unicode:也称万国码,最开始2个字节表示一个字符,后升级到4个字节表示一个字节

    Utf-8:最后用8位表示一个字符。英文字母:8位;欧洲:16位;亚洲中国:3个字节

    Gbk:国际标准,英文和中文都占用2个字节

    ²  不同编码之间的二进制是不能识别的

    ²  对文件的存储及传输不能用unicode

    编码之间的转换:python3

    Str:内存中编码用unicode

       表现形式s1=’alex’ s2='中国

    Bytes:拥有str所有的操作方法,但内部编码(不是unicode,可以是utf-8,gbk…..)

          如果使用utf-8编码,表现形式s1= b'alex' s2= b'xe4xb8xadxe5x9bxbd

    Stràbytes

    中文

    s1='中国'

    b1=s1.encode('utf-8')

    print(b1): b'xe4xb8xadxe5x9bxbd'

    英文:

    s1='english'

    b1=s1.encode('utf-8')

    print(b1)   b'english'

    bytes---> str  decode 解码

    s2 = b1.decode('utf-8')

    print(s2)--- English

    在utf-8和gbk中,英文都是引用的ASCII的格式,所以可以识别

    Unicode utf-8 gbk三者之间的转换关系

     

    Utf-8转化为gbk

    s4='中国'-------unicode格式

    b4=s4.encode('utf-8')

    g4=b4.decode('utf-8').encode('gbk')

    3.集合

    主要用于关系测试和列表去重复

    3.1列表去重复:

    list1 = [1,2,2,3,3,4,4,5]

    print(set(list1))-------------{1, 2, 3, 4, 5}

    list1=set(list1)

    list1=list(list1)

    print(list(list1)) -------------[1, 2, 3, 4, 5]

    3.2集合的增删改查

    3.2.1#增

    set1={'wusir','oldboy','ritian'}

    set1.add('taibai')------ {'ritian', 'oldboy', 'taibai', 'wusir'}(也可以看出来是无序的)

    set1.update('abc')----- {'a', 'oldboy', 'b', 'c', 'ritian', 'wusir'}  相当于无序

    3.2.2#删

    set1.pop()---------随机删除某一元素

    set1.remove('ritian')---------按照元素删除

    set1.clear()---------清空列表,返回值为空集合set()

    del set1-------删除集合

    3.2.3#改,集合是无序的,所以无法更改

    3.2.4#查,只能用for循环

    for i in set1:

    print(i)

    打印结果:

    ritian

    wusir

    oldboy

    3.3集合的关系测试

    set1 = {1,2,3,4,5}

    set2 = {4,5,6,7,8}

    3.3.1交集:

    print(set1&set2)# {4, 5}

    print(set1.intersection(set2))# {4, 5}

    3.3.2 并集

    print(set1|set2)    # {1, 2, 3, 4, 5, 6, 7, 8}

    print(set1.union(set2))  # {1, 2, 3, 4, 5, 6, 7, 8}

    3.3.3 差集 set1独有的

    print(set1-set2)  #{1, 2, 3}

    print(set1.difference(set2)) #{1, 2, 3}

    3.3.4 反交集

    print(set1^set2)   #{1, 2, 3, 6, 7, 8}

    print(set1.symmetric_difference(set2)) #{1, 2, 3, 6, 7, 8}

    3.3.5 父子集  返回bool值

    set1={1,2,3}

    set2={1,2,3,4,5}

    print(set1<set2) #True

    print(set1.issubset(set2)) #True

    3.3.6超集  返回bool值

    set1={1,2,3}

    set2={1,2,3,4,5}

    print(set2>set1)    #True

    print(set2.issuperset(set1)) #True

    4.深浅copy

    4.1赋值运算:公用一个内存地址

    s1=[1,2,3]

    s2=s1

    s1.append(666)

    print(s1,s2)# [1, 2, 3, 666] [1, 2, 3, 666]

    4.2浅copy:第一层独立,第二层至第n层共用内存

    s1=[1,2,3]

    s2=s1.copy()

    s1.append(666)

    print(s1,s2)# [1, 2, 3, 666] [1, 2, 3]

    s1=[1,2,3,[11,22]]

    s2=s1.copy()

    s1[-1].append(666)

    print(s1,s2)# [1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22, 666]]

    4.3深copy,无论多少层都各自独立

    需引入copy模块

    import copy

    s1=[1,2,3,[11,22]]

    s2=copy.deepcopy(s1)

    s1[-1].append(666)

    print(s1,s2)# [1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22]]

    4.4 切片为浅copy

    s1=[1,2,3,[11,22]]

    s2=s1[:]

    s1[-1].append(666)

    s1.append(10)

    print(s1,s2)# [1, 2, 3, [11, 22, 666], 10] [1, 2, 3, [11, 22, 666]]

    5 文件操作

    5.1 文件的打开

    5.1.1 参数

    文件路径:path

    编码方式encoding:gbk,utf-8

    操作方式mode:读,写,读写,写读,追加,改。。。。。

    Open()调用操作系统(windows,linux,苹果)内部的open

    f1=open(r'E:/老男孩/day-3/test.txt',encoding='utf-8',mode='r')

    #前面加r进行特殊字符转换,一般建议加上

    print(f1.read())

    f1.close()

    5.1.2文件句柄

    可用如下句柄:f,file,file_hander,f_h....

    一切都文件的打开都是基于文件句柄

    5.1.3执行流程

        1,打开文件,产生文件句柄。

        2,对文件句柄进行操作。

    3,关闭文件句柄。

    5.2 模式

    5.2.1读写追加模式

    读:r rb r+(读写) r+b

    # Open()的默认模式,不指定mode的时候,则为r

    写:w wb w+(写读)

    追加:a ab a+ a+b

    带b为操作为非文字文件比如视频,图片,不需指定编码,以bytes类型读取。

    f1 = open('1.jpg', mode='rb')

    5.3读的操作方法

    5.3.1 read()全部读出来

    5.3.2 read(n)

    如果为文本文件,一次读n个字符

    如果为非文本文件,一次读n个字节。也就是rb模式的时候。

    5.3.3 readline() 读一行按行读取

    5.3.4 readlines() 全部读出来,生成列表,每一行是一个元素

    5.3.5 for循环

    for line in f1:

    print(line)

    总结:方法read(),read(n),readline(),readlines(),都占用内存,如果文件比较大的时候,容易引起内存崩溃。建议用for循环。

    5.4写的操作方法

    只有write()一种操作方法,见写(w)就先清空文件

    w模式,没有文件,新建文件然后写入;有原文件,则先清空再写入。

    5.4.1文本文件的写

    f1=open('log1.txt',encoding='utf-8',mode='w')

    f1.write('oldboy Sunday')

    f1.close()

    5.4.2图片的读写 wb

    f1=open('1.jpg',mode='rb')

    content=f1.read()

    f2=open('2.jpg',mode='wb')

    f2.write(content)

    f1.close()

    f2.close()

    5.5追加 a

    有文件,追加内容;无文件,创建文件

    f1=open('log1.txt',encoding='utf-8',mode='a')

    f1.write(' taibai')

    f1.close()

    5.6读写模式r+,读模式+写的功能

    f1=open('log1.txt',encoding='utf-8',mode='r+')

    f1.read()#读到最后,所以光标移动到最后,所以alex在最后添加

    f1.write('alex')

    f1.close()

    5.7模式w+,写读模式,意义不大

    5.8模式a+,先追加再写

    5.9其它操作方法

    flush写一部分就保存一部分

    readable()判断文件是否可读,返回True或者False

    writeable()是否可写

    tell()获取光标在哪:f1.tell()

    seek()获取光标的位置:f1.seek(0,2)光标调整到末尾

                         f1.seek(0)调整到开头

     f1.seek(n)光标调整到n

    truncate()数据截取:安装字节对原文件进行截取,必须为a或者a+模式

    f1=open('log1.txt',encoding='utf-8',mode='a+')

    f1.truncate(5)

    f1.close()

    最后文件log1.txt只留下了前5个字节的内容

    5.10 with open的使用

    5.10.1

    1.在一定时间内自动关闭句柄

    2.可同时打开多个句柄

    3. 有的时候对多个句柄同时进行操作的时候,容易出问题,建议人工关闭句柄

    with open('log1.txt',encoding='utf-8',mode='r') as f1,

        open('log2.txt',encoding='utf-8',mode='w') as f2:

        print(f1.read())

    f2.write('6666')

    5.11文件的改的流程

    1,以读模式打开原文件。

    2,以写的模式打开一个新文件。

    3,将原文件读出按照要求修改将修改后的内容写入新文件。

    4,删除原文件。

    5,将新文件重命名原文件

    import os

    with open('file', encoding='utf-8') as f1,

        open('file.bak', encoding='utf-8', mode='w') as f2:

        old_content = f1.read()

        new_content = old_content.replace('alex', 'beijing')

        f2.write(new_content)

    os.remove('file')

    os.rename('file.bak', 'file')

    5.12模式w,为关闭句柄,不会清空内容,会一直写入

    with open('log3.txt',encoding='utf-8',mode='w') as f1:

        f1.write('1111')

        f1.write('2222')

        f1.write('ssss')

    log3.txt内容为11112222ssss

    6.函数

    6.1函数初识

    6.1.1函数格式

    def 关键字 函数名():

    函数体

    6.1.2函数执行:函数名()

    函数:以功能为导向

    6.1.3 return语句

    1. 终止函数

    2. 给函数的执行者返回值

       return 返回none

       return 单个值

       return 多个值,返回为元组,例如(‘alex’,666,[1,3])

    6.2函数参数

    形参 def my_len()

    实参 my_len()

    6.2.1实参

    1. 位置参数:形参必须与之一一对应

    def func1(a,b,c):

        print(a,b,c)

    func1(1,2,'alex')

    2.关键字参数:func1(a=3,b=2)可以不按顺序,必须一一对应

    def func1(a,b,c):

        print(a,b,c)

    func1(a=1,b=2,c='alex')

    3.混合参数:(位置参数,关键字参数)

               关键字参数必须放在位置参数后面

    6.2.2形参

    1.位置参数:按顺序与实参一一对应

    def func1(a,b,c):

        print(a,b,c)

    func1(1,2,'alex')

    2.默认参数:默认参数放在位置参数后面

    def func2(a,b,c='3'):

        print(a,b,c)

    func2(1,2,5)或func2(1,2)

    3.动态参数:也叫万能参数,约定俗称用这两个*args,**kwargs

     *args:所有位置参数,放在元组中

    **kwargs:所有关键字参数,放在字典中

    *代表聚合

    def func3(*args,**kwargs):

        print(args)

        print(kwargs)

    func3(1,2,3,a=1,b=2)

    输出结果

    (1, 2, 3)

    {'a': 1, 'b': 2}

    *在函数执行的时候代表打散

    func3(*[1,2,3],**{'name':'alex'},**{'age':25})

    输出结果:

    (1, 2, 3)

    {'name': 'alex', 'age': 25}

    6.3 形参的执行顺序

    位置参数 *args,默认参数,**kwargs

    def func4(a,b,*args,sex=’男’,**kwargs)

    6.4补充 三元运算

    def max(a, b):

        if a > b:

            return a

        else:

            return b

    比较麻烦,可以进化为一句话

    def max(a,b):return a if a>b else b

  • 相关阅读:
    多表联合查询,利用 concat 模糊搜索
    order by 中利用 case when 排序
    Quartz.NET 3.0.7 + MySql 动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(一)
    ASP.NET Core 2.2 基础知识(十八) 托管和部署 概述
    ASP.NET Core 2.2 基础知识(十七) SignalR 一个极其简陋的聊天室
    ASP.NET Core 2.2 基础知识(十六) SignalR 概述
    ASP.NET Core 2.2 基础知识(十五) Swagger
    ASP.NET Core 2.2 基础知识(十四) WebAPI Action返回类型(未完待续)
    linux磁盘管理 磁盘查看操作
    linux磁盘管理 文件挂载
  • 原文地址:https://www.cnblogs.com/junyingwang/p/9079419.html
Copyright © 2011-2022 走看看