python学习(day3)

发布时间:2019-09-24 08:38:58编辑:auto阅读(1665)

    1、集合的使用:

    #1、集合的操作:
    list_1 = [1,4,5,7,3,6,7,9]
    list_1 = set(list_1)#创建集合
    
    list_2 = set([2,6,0,22,66,8,4])
    print(list_1,type(list_1),list_2)
    
    print(list_1.intersection(list_2))#取两集合的交集
    print(list_1.union(list_2))#并集
    print(list_1.difference(list_2))#差集 in list_1 but not in list_2
    print(list_2.difference(list_1))#差集
    list_3 =set([1,4,7])
    print(list_3.issubset(list_1))#子集
    print(list_1.issuperset(list_3))#父集
    print(list_1.symmetric_difference(list_2))#对称差集
    
    print("-------------")
    list_4 =set([5,6,8])
    print(list_3.isdisjoint(list_4))#Return True if two sets have a null intersection
    
    print("运算符".center(50,'-'))
    print(list_1 & (list_2))#并集
    print(list_1 | (list_2))#并集
    print(list_1 - (list_2))#差集in list_1 but not in list_2
    print(list_1 ^ (list_2))#对称差集
    print(list_1 ^ (list_2))#对称差集
    
    print(list_1.add(999))#添加
    list_1.update([888,777])#添加多项
    print(list_1)
    list_1.remove(1)#指定删除
    print(list_1)
    print(list_1.pop())#随机删除并返回
    #list_1.remove()为空会报错
    list_1.discard(888)#删除
    print(list_1)

    2、文件操作:

        打开文件的模式有:

        r,只读模式(默认)。

        w,只写模式。【不可读;不存在则创建;存在则删除内容;】

        a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

        "+" 表示可以同时读写某个文件

        r+,可读写文件。【可读;可写;可追加】

        w+,写读

        a+,同a

        "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

        rU

        r+U

        "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

        rb

        wb

        ab

    f = open("Yesterday.txt",'r+')#文件句柄,Yesterday.txt:文件名
    data = f.read()
    print(data)
    print(f.write("123"))
    
    f = open("Yesterday.txt","r+",encoding="utf - 8")
    #data = f.readlines()
    #high bige
    count = 0
    for line in f:
        if count==9:
            print('----我是分割线-----')
            count += 1
            continue
        print(line)
        count += 1
    print("1111111231231211111",f.tell())
    f.close()
    
    f = open("Yesterday.txt",'r+',encoding="utf - 8")
    print("11111111111111111111",f.tell())#tell() 方法返回文件的当前位置,即文件指针当前位置。
    print(f.readline())
    print(f.readline())
    print(f.readline())
    print(f.tell())
    f.seek(0)#seek() 方法用于移动文件读取指针到指定位置。
    print(f.readline())
    print(f.encoding)#文件字符编码
    print(f.fileno())#fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。
    print(f.name)#打印文件名
    print(f.flush())#flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
    #一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
    
    f.close()
    f = open("Yesterday2.txt",'r+')
    f.truncate(10)#truncate() 方法用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则重置到当前位置。
    f.close()
    
    #f = open("Yesterday2.txt",'wb')
    #print(f.readline())
    f = open("Yesterday2.txt",'wb')
    f.write('hello binary\n'.encode(encoding='utf-8'))
    f.close()
    '''
    #low loop
    for line in f.readlines():
        print(line)
    '''

     2、1with语句:

    import sys
    print(sys.getdefaultencoding())#打印系统默认编码
    with open("Yesterday.txt",'r',encoding="utf-8") as f,\
          open("Yesterday2.txt",'r',encoding="utf-8") as f2:
        for line in f:
            print(line)#with代码块执行完毕时,内部会自动关闭并释放文件资源

      2、2文件修改:

    f = open("Yesterday1.txt",'r',encoding="utf-8")
    f_new = open("Yesterday2.txt",'w',encoding="utf-8")
    for line in f:
        if "舌尖上的雨" in line:
            line = line.replace("舌尖上的雨","一二三四五")#replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
        f_new.write(line)
    f.close()
    f_new.close()

    3、字符编码:

    # Author:deyi liu
    import sys
    print(sys.getdefaultencoding())#打印系统默认编码
    s = "你好"
    s_gbk = s.encode("gbk")
    print(s_gbk)
    print(s.encode())
    gbk_to_utf8 = s_gbk.decode("gbk").encode("utf-8")
    print(gbk_to_utf8)
    # -*- coding:gbk -*-
    import sys
    print(sys.getdefaultencoding())#打印系统默认编码
    s = "你好"#文件编码为gbk,但s = "你好"的编码为Unicode
    print(s.encode("gbk"))
    print(s.encode("utf-8"))
    print(s.encode("utf-8").decode("utf-8").encode("gb2312"))
    print(s.encode("utf-8").decode("utf-8").encode("gb2312").decode("gb2312"))

    4、函数:

    函数定义:

    def test(x):#def定义函数关键字,test函数名,()内容定义形参
        "The function definitions"#文档描述
        x+=1#泛指代码块或程序处理逻辑
        return x#return定义返回值
    #定义函数
    def func1():
        "testing1"
        print("in the func1")
        return 0
    
    #定义过程(没有返回值的函数)
    def func2():
        "testing2"
        print("in the func2")
    
    x = func1()
    y = func2()
    print("from func1 return is: %s"%x)
    print("from func2 return is: %s"%y)
    import time
    
    def logger():
        time_format = '%Y-%m-%d %X'#年月日时,%X 本地相应的时间表示
        time_current = time.strftime(time_format)#time strftime() 函数接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。
        with open("a.txt",'a+') as f:
            f.write('time is %s end action\n'%time_current)
    
    def test1():
        print("test1 starting action...")
        logger()
    
    def test2():
        print("test2 starting action...")
        logger()
    
    def test3():
        print("test3 starting action...")
        logger()
    
    test1()
    test2()
    test3()
    #定义函数
    def test1():
        print("in the test1")
    def test2():
        print("in the test2")
        return 0
    
    def test3():
        print("in the test3")
        return 1,'hello',['alex','wupeiji'],{'name':'alex'}
    
    x = test1()
    y = test2()
    z = test3()
    print(x)
    print(y)
    print(z)
    #定义函数
    def test(x,y):#x,y形参
        print(x)
        print(y)
    test(1,2)#1,2实参,与形参一一对应(位置参数调用)
    test(y=1,x=2)#与形参顺序无关(关键字调用)
    test(3,y=1)#关键字不能再位置参数前面
    def test(x,y=2):#y=2默认参数,默认参数非必须传递
        print(x)
        print(y)
    test(1)
    #test(1,3)

    参数组:

    def test(*args):#参数组,以*开头,接受N个位置参数,转换成元组的形式
        print(args)
    test(1,2,3,4,5)
    test(*[1,2,3,4,5])#args=tuple([1,2,3,4,5])
    
    def test1(x,*args):
        print(x)
        print(args)
    test1(1,2,3,4,5)
    
    def test2(**kwargs):#把n个关键字参数,转换成字典的形式
        print(kwargs)
        print(kwargs['name'])
        print(kwargs['age'])
        print(kwargs['sex'])
    test2(name='alex',age=8,sex='F')#kwargs={'name': 'alex','age': 8, 'sex': 'N'}
    test2(**{'name': 'alex','age': 8, 'sex': 'N'})#kwargs={'name': 'alex','age': 8, 'sex': 'N'}
    
    def test3(name,**kwargs):
        print(name)
        print(kwargs)
    test3('alex',age=8)
    
    def test4(name,age=8,*args,**kwargs):#参数组要放在后面
        print(name)
        print(age)
        print(args)
        print(kwargs)
    test4('alex',age=3,sex='F',hobby='tesla')
    def test4(name,age=8,*args,**kwargs):#参数组要放在后面
        print(name)
        print(age)
        print(args)
        print(kwargs)
        logger("TEST4")
    
    def logger(source):
        print("from %s"%source)
    test4('alex',age=3,sex='F',hobby='tesla')

    高阶函数:

    def add(a, b, f):  # abs() 函数返回数字的绝对值
        return f(a) + f(b)
        
    res = add(3,-6,abs)# abs() 函数返回数字的绝对值
    print(res)

    5、局部变量:

    school = "Oldboy edu."#全局变量
    def change_name(name):
        global school#global声明全局变量
        school = "asd"#局部变量
        print("before change",name,school)
        name = "Alex Li"#这个函数就是这个变量的作用域
        print("after change",name)
    name = "alex"
    change_name(name)
    print(name)
    print(school)
    names = ["Alex","Jack","Rain"]
    def change_name():
        names[0] = "金角大王"#字符串,整数不能再局部里面修改,列表,字典,集合,类的可以
        print("inside func",names)
    change_name()
    print(names)

    6、进度条:

    import sys,time
    #sys.stdout.write("asd")
    #sys.stdout.write("asd")#不换行
    
    for i in range(20):
        sys.stdout.write("#")
        sys.stdout.flush()#调用sys.stdout.flush()强制其“缓冲
        time.sleep(0.1)

    7、递归:

    def calc(n):
        print(n)
        if int(n/2)>0:
            return calc(int(n/2))
        print("->",n)
    
    calc(10)


关键字