• python函数基础(3)


    第1章 编码补充
    1.1 字符编码对照表
    1.2 编码特性
    1.4 encode/decode
    第2章 集合
    2.1 特点
    2.2 【重点】作用:去重
    2.3 常用操作
    2.3.1 删除
    2.3.2 交集判断-isdisjoint
    2.4 列表转换集合
    2.5 集合转换列表
    第3章 深浅copy
    3.1 共用内存地址
    3.2 copy参数
    3.3 copy特性
    3.3.1 例:浅copy
    3.3.2 例:深copy
    3.3.3 切片浅copy
    第4章 文件操作
    4.1 文件打开方式-open
    4.2 文件句柄
    4.3 读r
    4.3.1 默认:方式全部读出来
    4.3.2 read(n):读一部分
    4.3.3 rb
    4.3.4 readline()
    4.3.5 readlines()
    4.3.6 for 循环
    4.3.7 r+ r+b
    4.4 写:w
    4.4.1 wb
    4.4.2 图片的读写
    4.4.3 图片的写入
    4.4.4 w+
    4.4.5 w+b
    4.5 追加:a
    4.5.1 ab
    4.5.2 a+
    4.5.3 a+b
    4.6 其他操作方法
    4.6.1 常用参数列表
    4.6.2 with open
    4.6.3 更改文件
    4.6.4 版本升级
    第5章 函数
    5.1 初识函数
    5.2 函数返回值
    5.2.1 return
    5.2.2 例:
    5.3 函数传参
    5.3.1 形参
    5.3.2 实参
    第6章 拾遗
    6.1 'is'/'id'/'=='区别
    6.2 小数据池

    第1章 编码补充

    1.1 字符编码对照表

    编码格式

    别名

    表示内容

    例举

    ascii

    英文

    可以表示,数字,字母 特殊字符;

    字节:8位表示一个字节;

    字符:是你看到的内容的最小组成单位

    abc : a 一个字符。

    中国:中 一个字符

    a : 0000 1011

    unicode

    万国码

    可以表示万国语言;

    字节:32位表示一个字节

    a : 0000 1011 0000 1011 0000 1011 0000 1011

    中: 0000 1011 0000 1111 0000 1011 0000 1011

    gbk

    国标

    英文表示用一个字节

    中文表示用两个字节

    a: 0000 1011

    中:0000 1011 0000 1011 两个字节

    utf-8

    通用

    最少用8位表示一个字符

    a: 0000 1011

    欧洲: 0000 1011 0000 1011

    亚洲中:0000 1011 0000 1011 0000 1011

    1.2 编码特性

    u  不同编码之间的二进制是不能互相识别的。

    u  对于文件的存储,及传输 不能是unicode的编码。

    u  bytes:内部编码方式(非unicode,utf-8,gbk.gb2312...)

    u  str : 内部编码方式unicode

    1.3 例:

    # !/usr/bin/env python

    # -*- coding:utf-8 -*-

    s1 = 'alex'

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

    print(b1)

    b1 = b'alex'

    print(s1.capitalize())

    print(b1.capitalize())

     

    s1 = '中国'

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

    print(b1)

    输出

    b'alex'

    Alex

    b'Alex'

    b'xe4xb8xadxe5x9bxbd'

    1.4 encode/decode

    s1 = 'alex'

    # str ---> bytes encode 编码

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

    print(b1)

    #bytes---> str  decode 解码

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

    print(s2)

    输出

    b'alex'

    alex

    第2章 集合

    2.1 特点

    l  每个元素必须是不可变类型(可hash,可作为字典的key)

    l  没有重复的元素,去重

    l  无序,常用关系测试

    2.2 【重点】作用:去重

    符号一览表

    符号

    定义

    |

    合集

    &

    交集

    -

    差集

    ^

    对称差集

    ==

    相同集合

    >,>= ,<,<=

    父集,子集

     

    练习:

    pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}

    linuxs={'wupeiqi','oldboy','gangdan'}

    #求出即报名python又报名linux课程的学员名字集合

    print(pythons & linuxs)

    #求出所有报名的学生名字集合

    print((pythons | linuxs))

    print(len(pythons | linuxs))

    #求出只报名python课程的学员名字

    print(pythons - linuxs)

    #求出没有同时这两门课程的学员名字集合

    print(pythons ^linuxs)

    输出

    C:python3python.exe D:/python/untitled/two_day.py

    {'wupeiqi', 'gangdan'}

    {'biubiu', 'gangdan', 'alex', 'oldboy', 'wupeiqi', 'yuanhao', 'egon'}

    7

    {'egon', 'biubiu', 'yuanhao', 'alex'}

    {'biubiu', 'oldboy', 'alex', 'egon', 'yuanhao'}

    2.3 常用操作

    2.3.1 删除

    sl={1,2,3,'a',4}

    print(sl.pop())

    sl.remove('a')

    sl.remove('as')

    print(sl)

    输出:

    Traceback (most recent call last):

      File "D:/python/untitled/two_day.py", line 233, in <module>

        sl.remove('as')

    KeyError: 'as'

    注意:

    l  pop随机删除,并返回删除的结果

    l  remove 单纯的删除,不会返回结果,如果删除的元素不在则报错

    2.3.2 交集判断-isdisjoint

    sl={1,2,3,'a',4}

    s2={4,5}

    print(sl.isdisjoint(s2))

    如果sl和s2没有交集则返回True

    2.4 列表转换集合

    l1 = {1,2,3,4,52,33,33,4,4,5}

    print(set(l1))

    输出

    C:python3python.exe D:/python/untitled2/python_auto/lianxi3.py

    {1, 2, 3, 4, 33, 5, 52}

    2.5 集合转换列表

    set = {1,2,3,4,52,33,33,4,4,5}

    print(list(set))

    输出

    C:python3python.exe D:/python/untitled2/python_auto/lianxi3.py

    [1, 2, 3, 4, 33, 5, 52]

    第3章 深浅copy

    3.1 共用内存地址

    s1 = [1, 2, 3]

    s2 = s1  # 共用一个

    s1.append(666)

    print(s1, s2)

    输出

    [1, 2, 3, 666] [1, 2, 3, 666]

    [1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22, 666]]

    3.2 copy参数

    s1 = [1, 2, 3]

    s2 = s1.copy()

    s1.append(666)

    print(s1, s2)

    输出

    [1, 2, 3, 666] [1, 2, 3]

    3.3 copy特性

    u  浅copy:使用copy参数,第一层各自独立,第二层开始,共用一个内存地址

    u  深copy:调用copy模块,无论多少层,都是相互独立的

    3.3.1 例:浅copy

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

    s2 = s1.copy()

    s1[-1].append(666)

    print(s1, s2)

    print(id(s1), id(s2))

    print(id(s1[-1]), id(s2[-1]))

    输出

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

    s2 = s1.copy()

    s1[-1].append(666)

    print(s1, s2)

    print(id(s1), id(s2))

    print(id(s1[-1]), id(s2[-1]))

    3.3.2 例:深copy

    import copy

    ##第一层追加

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

    s2 = copy.deepcopy(s1)

    s1.append(666)

    print(s1, s2)

    ##第二层追加

    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]]

    [1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22]]

    3.3.3 切片浅copy

    1)第一层追加

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

    s2 = s1[:]

    s1.append(666)

    print(s1, s2)

    输出

    C:python3python.exe "D:/python/untitled2/python_3/05 深浅copy.py"

    [1, 2, 3, [11, 22], 666] [1, 2, 3, [11, 22]]

    2)第二层追加

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

    s2 = s1[:]

    # s1.append(666)

    s1[-1].append(666)

    print(s1, s2)

    输出

    C:python3python.exe "D:/python/untitled2/python_3/05 深浅copy.py"

    [1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22, 666]]

    第4章 文件操作

    4.1 文件打开方式-open

    解释:open()调用的内置函数,内置函数调用的系统内部的open,

    #!/usr/bin/env python

    # -*- coding:utf-8 -*-

    f1 = open(r'd:/superman.txt', encoding='utf-8', mode='r')

    print(f1.read())

    f1.close()

    输出

    C:python3python.exe "D:/python/untitled2/python_3/06 文件操作.py"

    天空没有留下我的痕迹,但我已飞过.....

                                    ______泰戈尔

    4.2 文件句柄

    u  解释:f1 文件句柄,又称之为(f,file,file_hander,f_h....)

    u  说明:一切对文件进行的操作都是基于文件句柄f1.

    u  执行流程:

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

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

            3.关闭文件句柄。

    u  报错原因:

            1.编码错误编码不一致,前面加r或者在加上// 进行转义解决路径问题

                UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 15: illegal multibyte sequence

            2.路径错误。

                SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated UXXXXXXXX escape

            3.未转义。

                        r'd:/superman.txt',

                        'd://superman.txt',

    4.3 读r

    4.3.1 默认:方式全部读出来

    f1 = open('log1', encoding='utf-8')

    content = f1.read()

    print(content)

    f1.close()

    输出

    C:python3python.exe "D:/python/untitled2/python_3/06 文件操作.py"

    111666333222

    4.3.2 read(n):读一部分

    f1 = open('log1', encoding='utf-8')

    content = f1.read(3)

    print(content)

    f1.close()

    输出

    C:python3python.exe "D:/python/untitled2/python_3/06 文件操作.py"

    111

    4.3.3 rb

    解释:

    u  r 模式 read(n)  n 按照字符读取。

    u  rb 模式 read(n)  n 按照字节读取。

    例:

    f1 = open('log1', mode='rb')

    print(f1.read(3).decode('utf-8'))

    f1.close()

    输出

    C:python3python.exe "D:/python/untitled2/python_3/06 文件操作.py"

    例:

    f1 = open('log1', mode='rb')

    print(f1.read(4).decode('utf-8'))

    f1.close()

    输出

    C:python3python.exe "D:/python/untitled2/python_3/06 文件操作.py"

    Traceback (most recent call last):

      File "D:/python/untitled2/python_3/06 文件操作.py", line 27,

    4.3.4 readline()

    解释:按行读取

    f1 = open('log1', encoding='utf-8')

    print(f1.readline())

    print(f1.readline())

    print(f1.readline())

    f1.close()

    输出

    文件操作.py"

    111666333222

     

    12321321321

     

    21312321321321

    4.3.5 readlines()

    解释:全部读出来并显示为列表的形式

    f1 = open('log1', encoding='utf-8')

    print(f1.readlines())

    f1.close()

    输出

    C:python3python.exe "D:/python/untitled2/python_3/06 文件操作.py"

    ['111666333222 ', '12321321321 ', '21312321321321']

    4.3.6 for 循环

    f1 = open('log1', encoding='utf-8')

    for line in f1:

        print(line)

    f1.close()

    输出

    C:python3python.exe "D:/python/untitled2/python_3/06 文件操作.py"

    111666333222

     

    12321321321

     

    21312321321321

    4.3.7 r+ r+b

    解释:r+ 读写规则先读后写

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

    print(f1.read())光标读到最后

    f1.write('777')在最后插入777

    print(f1.read())光标移动到最后所以这一次读没有输出

    f1.close()

    输出

    C:python3python.exe "D:/python/untitled2/python_3/06 文件操作.py"

    6664546789

    12321321321

    21312321321321#并没有777而是再源文件中生成

    4.4 写:w

    u  没有文件,新建文件写入内容。

    u  有原文件,先清空内容,在写入新内容。

    例:

    f1 = open('log2', encoding='utf-8', mode='w')

    f1.write('fdksagdfsa')

    f1.close()

    输出

    C:python3python.exe "D:/python/untitled2/python_3/06 文件操作.py"

     

    Process finished with exit code 0

    清空源文件,生成新的字符串fdksagdfsa

    4.4.1 wb

    4.4.2 图片的读写

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

    content = f1.read()

    print(content)

    输出

    C:python3python.exe "D:/python/untitled2/python_3/06 文件操作.py"

    b'xffxd8xffxe0x00x10JFIFx00x01x01x00x00x01x00x01x00x00xffxdbx00Cx00x02x01x01x01x01x01x02x01x01x01x02x02x02x02x02x04x03x02x02x02x02x05x04x04x03x04x06x05x06x06x06x05x06x06x06x07

    4.4.3 图片的写入

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

    content = f1.read()

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

    f2.write(content)

    f1.close()

    f2.close()

    图片二被清空,图片1写入图片2

    4.4.4 w+

    解释:先读后写

    f1 = open('log2', encoding='utf-8', mode='w+')

    f1.write('superman')

    f1.seek(0)

    print(f1.read())

    f1.close()

    输出

    C:python3python.exe "D:/python/untitled2/python_3/06 文件操作.py"

    superman

    先清空在写入Superman

    4.4.5 w+b

    4.5 追加:a

    解释 :没有文件,新建文件写入内容

    f1 = open('log3', encoding='utf-8', mode='a')

    f1.write('alex 666')

    f1.write(' alex 666')

    f1.close()

    输出

    alex 666

    alex 666

    4.5.1 ab

    解释:b参数的操作都是非文字类的文件

    4.5.2  a+

    解释:在文件末尾追加写入

    f1 = open('log3', encoding='utf-8', mode='a+')

    f1.write('python')

    f1.seek(0)

    print(f1.read())

    f1.close()

    输出

    C:python3python.exe "D:/python/untitled2/python_3/06 文件操作.py"

    alex 666

    alex 666python

    4.5.3 a+b

    4.6 其他操作方法

    4.6.1 常用参数列表

    常用参数

    解释

    readable

    是否可读

    writable

    是否可写

    f1.seek(12)

    任意调整

    f1.seek(0,2)

    光标调整到最后

    f1.seek(0)

    光标调整到开头

    f1.tell()

    告诉光标的位置

    f1.truncate(3)

    按照字节对原文件进行截取必须在a 或 a+ 模式

    f1 = open('log3', encoding='utf-8', mode='a+')

    print(f1.readable())

    print(f1.writable())

    f1.close()

    输出

    True

    True

    例:

    f1 = open('log3', encoding='utf-8', mode='a')

    print(f1.readable())

    print(f1.writable())

    f1.close()

    输出

    True

    False

    4.6.2 with open

    解释:不用关闭文件句柄

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

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

        con f2.write(content) tent = f1.read()

    4.6.3 更改文件

    u  以读模式打开原文件。

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

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

    u  删除原文件。

    u  将新文件重命名原文件。

    例:

    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', 'SB')

        f2.write(new_content)

     

    os.remove('file')

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

    4.6.4 版本升级

    import os

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

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

        for line in f1:

            new_line = line.replace('SB','alex')

            f2.write(new_line)

    os.remove('file')

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

    第5章 函数

    5.1 初识函数

    u  目的:解决代码重复性问题,提高可读性

    u  函数格式:

           '''

           def 关键字 函数名():

                  函数体

                  函数执行:函数名()

           函数:以功能为导向。

           '''

    5.2 函数返回值

    5.2.1 return

    u  终止函数。

    u  给函数的执行者返回值

        return  或者 return None

        return 单个值

        return 多个值 会将多个值放到一个元组中,将元组返回个函数的执行者

    5.2.2 例:

    s = 'lkfjsjulkjdgjdsf'

    def my_len():

        count = 0

        for i in s:

            count += 1

        return count

     

    print(my_len())

    5.3 函数传参

    5.3.1 形参

    解释:形式参数

    def my_len(argv):  # 形式参数 ,形参

     

        count = 0

        for i in argv:

            count += 1

        return count

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

    # my_len(s)  # 实际参数, 实参

    print(my_len(l1))

    输出

    C:python3python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

    5

    5.3.2 实参

    u  位置参数  按照顺序一一对应

    u  关键字传参  一一对应。

    u  混合参数。(位置参数,关键字参数) 关键字参数必须在位置参数后面

    u  动态参数。 *args, **kwargs 万能参数

          args:所有的位置参数,放在一个元组中。

           kwargs:所有的关键字参数,放在一个字典中。

    5.3.3 例:位置参数

    def func1(a, b, c):

        print(a, b, c)

    func1(1, 2, 'alex')

    输出

    C:python3python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

    1 2 alex

    5.3.4 例:关键字参数

    def func2(a, b):

        print(a, b)

    func2(b=2, a=3)

    输出

    C:python3python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

    3 2

    5.3.5 例:混合参数

    def func3(a, b, c, d):

        print(a, b, c, d)

    func3(1,2,d=3,c=5)

    输出

    C:python3python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

    1 2 5 3

    5.3.6 例:比较大写输出最大

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

    ret = 1 if 2 > 1 else 6

    print(max(10, 2))

    输出

    C:python3python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

    10

    5.3.7 例:动态参数

    u  *args表示单个元素

    u  **kwargs表示字典

    例1)

    def func3(*args, **kwargs):  #函数的定义的时候 * 代表聚合。

        print(args)

        print(kwargs)

    func3(1, 2, 3, 'alex', c=6, name='wusir', age='21')

    输出

    C:python3python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

    (1, 2, 3, 'alex')

    {'c': 6, 'name': 'wusir', 'age': '21'}

    例2)

    def func3(*args, **kwargs):  #函数的定义的时候 * 代表聚合。

        print(args)

        print(kwargs)

    func3(*[1, 2, 3],*(22, 33))  #函数的执行的时候 * 代表打散。

    输出

    C:python3python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

    (1, 2, 3, 22, 33)

    {}

    例3)

    def func3(*args, **kwargs):  #函数的定义的时候 * 代表聚合。

        print(args)

        print(kwargs)

    func3(**{'name':"alex"},**{'age':23})  #函数的执行的时候 * 代表打散。

    输出

    C:python3python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

    ()

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

    例4)

    def func3(*args, **kwargs):  #函数的定义的时候 * 代表聚合。

        print(args)

        print(kwargs)

    func3(1, 2, 3, 22, 33)  #函数的执行的时候 * 代表打散。

    输出

    C:python3python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

    (1, 2, 3, 22, 33)

    {}

    第6章 拾遗

    6.1 'is'/'id'/'=='区别

    l  == 数值比较

    l  is 比较的是内存地址

    l  id 测试的是内存地址

    6.2 小数据池

    解释:在一定范围内的数字或者字符串定义的变量都放在一个内存地址中,节省内存空间

    l  int: [-5:256]长度都是存放在一个地址池中

    l  str:不能含有特殊字符;单个元素*int(20)不能超过20;一般情况下设置的字符串变量都在一个小数据池中

    例1:涉及内存地址的都在在终端中测试

    例2:

  • 相关阅读:
    POJ 3660 Cow Contest
    HDOJ 2093 sscanf的使用,字符串对齐,快排
    HDOJ 2091 空格的特殊输入输出格式
    COJ 1081: 集训队分组
    HDOJ 2948 错排公式
    POJ 1936 All in All
    POJ 1035 Spell checker
    HDOJ 2094 set和map的使用
    HDOJ 2036 多边形的面积
    HDOJ 1166 敌兵布阵
  • 原文地址:https://www.cnblogs.com/wang-xd/p/9085304.html
Copyright © 2020-2023  润新知