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

  • 相关阅读:
    Python 学习笔记:需要仔细阅读一个函数
    asp.net 实现一个简单CAS Server
    用代码旋转屏幕
    Cassandra API60 Java 代码示例
    Ajax跨域访问代理类,支持GET和POST方法
    Android 给自己的类加个事件
    Python 学习笔记: 备份工具
    Android SQLiteHelper
    转:在 CLI 中練習 Data Model
    Java修饰符public,private,protected及默认的区别
  • 原文地址:https://www.cnblogs.com/junyingwang/p/9079419.html
Copyright © 2011-2022 走看看