• 第三章 函数与变量


    第三章 函数与变量

    第一课 集合及其运算
    集合:
    是一个无序的不重复的数据组合
    作用:
    1.去重:
    代码块:
    lit=[2,3,3,3,3,]
    lit=set(lit)
    print(lit,type(lit))
    运行输出:
    {2, 3} <class 'set'>
    2.关系测试:
    代码块:
    lt1=set([1,2,3,4,5])
    lt2=set([4,5,6,7,8])
    print(lt1.intersection(lt2))#交集
    print(lt1.union(lt2))#并集
    print(lt1.difference(lt2))#差集 lt1里有lt2里没有的
    print(lt2.difference(lt1))#差集 lt2里有lt1里没有的
    print(lt1.symmetric_difference(lt2))#对称差集 并集-交集
    lt3=set([2,3,4])
    print(lt3.issubset(lt1))#判断lt3是否为lt1的子集
    print(lt1.issuperset(lt3))#判断lt1是否为lt3的父集
    #简便写法
    print(lt1&lt2)#交集
    print(lt1|lt2)#并集
    print(lt1-lt2)#差集
    print(lt1^lt2)#对称差集
    运行输出:
    {4, 5}
    {1, 2, 3, 4, 5, 6, 7, 8}
    {1, 2, 3}
    {8, 6, 7}
    {1, 2, 3, 6, 7, 8}
    True
    True
    {4, 5}
    {1, 2, 3, 4, 5, 6, 7, 8}
    {1, 2, 3}
    {1, 2, 3, 6, 7, 8}
    基本操作:
    增:
    代码块:
    lt=set([1,2,3])
    lt.add(4)#用add方法一次只能增加一个元素
    lt.update([666,777,888])
    print(lt)
    运行输出:
    {1, 2, 3, 4, 777, 888, 666}
    删:
    代码块:
    lt.remove(666)#一次只能删一个元素
    print(lt)
    运行输出:
    {1, 2, 3, 4, 777, 888}
    常用增删,没有改查

    第二课 文件的读与写
    读:
    f=open('yesterday','r',encoding='utf8')
    data=f.read()
    print(data)
    f.close()
    用迭代器解决内存读大文件的问题:
    for line in f:
    print(line)

    写(从头写,将以前所有内容都覆盖):
    f=open('yesterday01','w',encoding='utf8')
    data1='红红火火恍恍惚惚 '
    data2='2333333333'
    f.write(data1)
    f.write(data2)
    f.close()
    追加:
    f=open('yesterday01','a',encoding='utf8')
    data3='拳打嘤嘤怪,脚踢竹鼠商'
    f.write(data3)
    f.close()
    输出:
    yesterday
    产生新文件yesterday01 内容为:
    红红火火恍恍惚惚
    2333333333拳打嘤嘤怪,脚踢竹鼠商

    第三课 文件的操作
    tell与seek:
    代码块:
    f=open('yesterday','r',encoding='utf8')
    print(f.tell())#查看光标位置
    print(f.readline())#读取一行文件内容
    print(f.tell())#查看光标位置
    f.seek(0)#将光标移回0位置
    print(f.tell())
    print(f.readline())
    print(f.tell())
    f.close()
    运行输出:
    0
    Seems the love I've ever known

    32
    0
    Seems the love I've ever known

    32
    flush()将内容从内存刷入硬盘,实现进度条
    代码块:
    import sys,time
    for i in range(20):
    sys.stdout.write('#')
    sys.stdout.flush()
    time.sleep(0.1)
    扩展:
    不常用(硬盘内存机制中有很多坑):
    读写模式:f=open('yesterday01','r+',encoding='utf8')
    写读模式:f=open('yesterday01','w+',encoding='utf8')
    加读模式:f=open('yesterday01','a+',encoding='utf8')
    常用(图片歌曲电影等文件):
    代码块:
    f=open('yesterday01','rb')#不能加编码参数encoding='x'
    print(f.readline())
    运行输出:
    b'xe5x91xb5xe5x91xb5xe5x93x92...
    文件的修改:
    代码块:
    f=open('yesterday02','r',encoding='utf8')
    f_new=open('yesterday02new','w',encoding='utf8')
    for line in f:
    if '等待我去享用' in line:
    line=line.replace('等待我去享用','等待pangzi去享用')
    print(111)
    f_new.write(line)
    f.close()
    f_new.close()
    with语句:实现自动关闭句柄
    with open('yesterday01','rb') as f:
    print(f.readline())

    第四课 字符编码与转码

    在pychon3中查看的字符串,都是Unicode的。编码都转为byte。
    utf8--(decode)-->unicode--(encode)-->GBK
    #utf8转GBK :文件以utf8解码(decode)为Unicode格式打开,再以GBK编码(encode)
    utf8<--(encode)--unicode<--(decode)--GBK
    #GBK转utf8 :文件以GBK解码(decode)为Unicode格式打开,再以utf8编码(encode)


    第五课 函数与函数式编程

    编程理念:
    1.面向对象:华山派---》类----》class
    2.面向过程:少林派---》过程----》def
    3.函数式编程:逍遥派---》函数---》def
    函数的定义:函数是逻辑结构化和过程化的一种编程方法
    def 函数名(x):
    #文档描述
    x+=1
    return x
    面向过程:利用函数体,不利用函数返回值
    代码块:
    import time
    def logger():
    time_format='%Y-%m-%d %X'
    time_current=time.strftime(time_format)
    with open('log','a')as f:
    f.write('%s end action ' %time_current)
    def test1():
    print('in the test1')
    logger()
    def test2():
    print('in the test2')
    logger()
    def test3():
    print('in the test3')
    logger()
    test1()
    test2()
    test3()
    运行输出:
    in the test1
    in the test2
    in the test3
    生成文件(log)内容:
    2018-01-02 15:11:12 end action
    2018-01-02 15:11:12 end action
    2018-01-02 15:11:12 end action

    函数:
    return 返回值:想要函数执行的结果
    参数:
    def test(x,y,z=3):
    #x,y,z叫形参,不占内存的,3叫默认参数,
    #如果函数被调用时无对应实参传入,则3充当实参
    print(x)
    print(y)
    test(1,2) #1,2叫实参,真正占内存空间的变量。
    不定长参数:
    代码块:
    def func1(*args):#形参写成*args 可以接收不定长的不同数据类型的实参
    print(args)
    func1(1,2,3,[4,5,6],(7,8,9),'jqk')
    运行输出:#将所有元素组成一个元组
    (1, 2, 3, [4, 5, 6], (7, 8, 9), 'jqk')
    代码块:
    def func2(**kwargs):#形参写成**kwargs 可以接收不定长键值对的实参
    print(kwargs)
    func2(name='julisha',job='teacher',age=18,sex='female')
    运行输出:#将所有键值对组合为一个字典
    {'name': 'julisha', 'job': 'teacher', 'age': 18, 'sex': 'female'}
    作用域:
    代码块:
    name='红红火火'
    job='老师' #定义全局变量name='红红火火',job='老师'
    def change_name(name):
    global job #如果想要在函数体内修改全局变量需要加global修饰,且不能当形参
    print('before change',name,job)
    name='恍恍惚惚' #局部变量的修改只在函数体内有效
    job='护士'#对全局变量做了修改
    print('after change',name)
    change_name(name)
    print('afetr function',name,job)
    运行输出:
    before change 红红火火 老师
    after change 恍恍惚惚
    afetr function 红红火火 护士 #name没有被修改,job被函数体修改
    提醒:虽然可以在函数里改全局变量,但极不推荐这样做
    递归:
    定义:
    在函数体内部,可以调用其他函数。如果一个函数在内部调用自己,就是递归函数。
    特性:
    1.必须有一个明确的结束条件,默认保护程序设置的递归次数最高990次
    2.每深一层递归,问题规模都应比上一次有所减小
    3.递归效率不高,次数过高容易溢出栈(stack)
    代码块:
    def func(n):
    print(n)
    if int(n)>0:
    return func(n/2)
    print('--->',n)
    func(10)
    运行输出:
    10
    5.0
    2.5
    1.25
    0.625
    ---> 0.625
    高阶函数:
    定义:
    一个函数接收另一个函数做参数,那么这个函数就称为高阶函数
    代码块:
    def func(a,b,f):
    return f(a)+f(b)
    def func1(x):
    y=x**2
    return y
    print(func(2,2,func1))
    运行输出:
    8
    作业:
    程序1.实现简单的shell sed 替换功能
    需求:
    对指定路径下的文件进行内容替换
    程序2.修改haproxy配置文件



  • 相关阅读:
    服务端实现url网页截屏、HTML保存为高质量PDF[puppeteer]
    网页保存为图片[rasterizeHTML]
    SortedList<T,K>,SortedDictionary<T,K>,Dictionay<T,K>用法区别
    svn实现类似git stash及git stash pop的功能
    MSBuild报错及找不到AxImp.exe或LC.exe问题
    记一个ios下text-overflow: ellipsis 与 text-align: justify 冲突的问题
    Chrome devtools inspect后打开空白解决办法
    Oracle长时间使用导致连接变慢且频繁报无法找到监听程序的错误
    vscode+vue不得不用的插件和不得不添加的配置
    初识vscode+vue
  • 原文地址:https://www.cnblogs.com/xuepangzi/p/8283253.html
Copyright © 2020-2023  润新知