zoukankan      html  css  js  c++  java
  • day03 set集合,文件操作,字符编码以及函数式编程

    嗯哼,第三天了

    我们来get 下新技能,集合,个人认为集合就是用来list 比较的,就是把list 转换为set 然后做一些列表的比较啊求差值啊什么的。

    先看怎么生成集合:

     1 list_s = [1,3,4,5,7,9]
     2 list_t = [1,3,4,5,7,9]
     3 dic_1 = {
     4     'name':'shenyang',
     5     'age':16
     6     }
     7 dic_2 = {'name':'wanglu',
     8          'age':18,
     9          'sex':'girl'}
    10 
    11 s = set(list_s)
    12 t = set(list_t)
    13 d = set(dic_1)
    14 n = set(dic_2)
    15 print(s,type(s))
    16 print(t,type(t))
    17 print(d,type(d))
    18 print(n,type(n))
    集合 set  也是无序的
      以后经常用到的数据类型,两个重要的用处:
      1 可以去重
      2 关系测试
     
    我们先来看去重功能:
     

    关系测试:
     
     
    取出交集

    找并集:

    找出list1 里有的但是在list2 中没有的
          同样可以找list2 里有的list1里没有的

     

    检查是否是子集

    #对称差集  把交集去掉,留两边互相都没有的

    检查两个set 是否有交集,有返回False 没有返回True

    使用运算符 来测试关系:

    添加:

    删除:
    remove  指定删除  如果不存在会报错  discard 不会报错
    pop  随机删除
    练习:
     1 #!/usr/bin/env python3
     2 s = set([1,3,4,5,7,9])
     3 t = set([2,3,4,6,8,10])
     4 #交集
     5 print(s & t)
     6 #并集
     7 print(s | t)
     8 #差集 有顺序,找出前面有的后面没有的
     9 print(s - t)
    10 #对称差集
    11 print(s ^ t)
    12  
    13 #往集合里添加
    14 s.add(10) #添加一项
    15 print(s)
    16 s.update([13,14,15]) #添加多项
    17 print(s)
    18 #删除
    19 s.pop() #随机删除
    20 print(s)
    21 s.remove(13) #删除指定项
    22 print(s)
    23  
    24 #成员测试
    25 if 14 in s:
    26 print("is in")
    27 if 13 not in s:
    28 print("is not in")
     
     
    文件操作:
     
    打开,操作,关闭
     
    打开:
    open("file_name“)
    读:
    open("file_name“,encoding="utf-8").read
    a = open("file_name“,encoding="utf-8").read
    print("a")

     

    打开文件要指定打开文件的模式:
    r 读模式 ,默认为读
    报错
    使用w模式写 会覆盖掉原来的文件
    追加模式:  a
    加在文件最后  不能读
     1 实验:
     2 1 写:
     3 file1 = open("music.lrc","r",encoding="utf-8")
     4 r_file1 = file1.read()
     5 print(r_file1)
     6 file1.close()
     7 2 读:
     8 file1 = open("music.lrc","r",encoding="utf-8")
     9 r_file1 = file1.read()
    10 print(r_file1)
    11 file1.close()
    12 3 追加:  并不能读
    13 file1 = open("music.lrc","a",encoding="utf-8")
    14 file1.write("This is the last write")
    15 file1 = open("music.lrc","r",encoding="utf-8")
    16 r_file1 = file1.read()
    17 print(r_file1)
    18 file1.close()

    一行一行读:

    一行一行读,但是也是全部一次性读取 ,并判断:
    readlines 会把一行转换为列表的每个元素.
     
    比较low 的办法
    高级的办法:
    真正的一行一行读,内存里只保存1行数据,我们应该忘记上面的方法,这种是最高效的

    判断行号,只能自己加一个计数器  高逼格的办法

    句柄指针:  是按字符计算的

    打印文件的字符编码:

    返回操作系统的发开文件的编号
    f.fileno()
     
    打印文件名字
    print(f.name)
     
    判断位置是否可移动的
    告诉操作系统强制刷入硬盘:
    f.flush()
     
    打印进度条
    不使用flush  会等待缓冲区满了才打印呢,使用flush  每次打印

     

    截断:
    截断多少字符,即从0开始保留多少的字符
    f.truncate(10)
    读写 :
    r+  先读 再写 也是追加
     
    写读:  基本没什么卵用
    w+   创建新文件再写
     
     
    文件读写原理,
    只要是写就会覆盖写所在的位置的原来的字符
     
    以二进制的格式读取文件:
    rb 
     
    以二进制格式写
    wb
     

    修改文件:

     
     1 实践:
     2 #!/usr/bin/env python3
     3 # Auth: Shen Yang
     4 f1 = open("lrc.db","r",encoding="utf-8")
     5 f2 = open("lrc2.db","w",encoding="utf-8")
     6 for line in f1:
     7     if "王山炮" in line:
     8         line = line.replace("王山炮","Alex")
     9     f2.write(line)
    10 f1.close()
    11 f2.close()
    同时打开多个文件建议换行  \
     
     
     
     
    字符编码:
     
    unicode 占两个字节 16位
     
    utf-8 是 unicode 的一个扩展,
       英文依然以阿斯克码那样存,中文占用三个字节 

     

    +++++++++++++++++++++++++++++++++++++++++++++
     
    先decode  并告诉我原来的是什么   然后转换成什么
     
    文件头就是制定我的文件是什么编码
     
     
     
     

    pyhton 3  默认所有的数据类型就是Unicode   你哈 还是 utf-8  除非你转到gbk 上面的只是说这个文件的编码

    python 3 中 encode 不但转换了编码还变成了bytes 格式的

    函数式编程:
     
     
    编程方法:
    1 面向对象
    2 面向过程
    3 函数式编程

    过程就是没有返回值的函数  但是在python 中  隐式的给过程一个结果

     1 练习:
     2 import time
     3 def logger():
     4     time_format = '%T-%m-%d %X'
     5     time_current = time.strftime(time_format)
     6     with open("fun.log","a+",encoding="utf-8") as f:
     7         f.write("{_format} aadd the log\n".format(_format=time_current))
     8     time.sleep(0.5)
     9 def test1():
    10     print("This is test1")
    11     logger()
    12 def test2():
    13     print("This is test2")
    14     logger()
    15 def test3():
    16     print("This is test3")
    17     logger()
    18 test1()
    19 test2()
    20 test3()

     

    优点:
    1 减少重复代码
    2 便于扩展和修改

     

    return  下面的就不再执行
     
    return 可以return 任意类型

     

    返回值 是返回一个元组,吧多个值返回到一个元组中
     
     
    x y 形参:
    不调用,永远不会占用空间
    实参:
    1 2

     

    实参和形参是一一对应的,按顺序,从左往右一一对应
     
    关键字参数,不需要遵循位置:

     

    默认参数:
     
    在定义形参的时候先给一个值

     

    默认参数特点:

     

    #用途:
     1 例如软件安装的时候,默认安装就是使用的默认参数

     传递非固定实参的时候形参使用以* 开头的任意字符即可但不要这样写,就写args :

     

     

    接收字典:
     
    **kwargs  :把n个关键字参数转换成字典方式:
    可以以关键字参数一直写下去:

     

    以字典的方式保存参数

     

    默认参数一定要放在** 的前面

     

    *args  接收的是位置参数,接收不到关键字参数
     
    **kwargs 接收的是关键字形式参数,接收不到位置参数
    局部变量:
    只在函数里生效:

     

    里面的改不了
     
     
    如果改全局的就需要声明一下

     

    测试:
     1 name = "yang"
     2 Job = "Pyther"
     3 def change_name(name="Lu"):
     4 #global Job
     5 Job = "Shell"
     6  
     7 print("name:",name,Job)
     8  
     9  
    10 change_name(name="Wang")
    11 print(name,Job)
     
    可以改,但是不要这么用:
    =+只

     

    递归函数:
    一个没有终点的递归最终会循环999次后报错:  程序的保护机制会自动给停了
    def calc(n):
        prin(n)
        return calc(n)

    永远循环下去就没了
     
    类似镜子里看镜子
     
     
    所以递归的特性为:
    1 必须有一个明确的结束条件
    2 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

     

    1 最简单的递归:
    2 #!/usr/bin/env python3
    3 # Auth: Shen Yang
    4 def calc(n):
    5     print(n)
    6     if int(n/2) >0:
    7         return calc(int(n/2))
    8     print("This is >>",n)
    9 calc(10)

    函数式编程,
    所谓函数式编程并不是我们所写的一个函数里面有好多代码,函数式编程里的函数的意思是数学中的函数。
    函数式编程语言有 erlang hashshell 等 
     
    只要了解以上即可
     
     
    高阶函数:
    所谓高阶函数就是把一个另一个函数传入函数中做运算
    1 def add(a,b,f):
    2     return f(a) + f(b)
    3 res = add(3,-6,abs)
    4 print(res)
    abs 是一个内置函数用来求绝对值
     
    结果是9
     
    还没用过。。。
     
     
     
    eval(b)  把字符串转为字典
     
  • 相关阅读:
    机器学习中的距离度量
    ubuntu 安装JDK
    pandas 代码
    pandas 常用统计方法
    python内置函数map/reduce/filter
    详解SQL Server连接(内连接、外连接、交叉连接)
    什么是SAD,SAE,SATD,SSD,SSE,MAD,MAE,MSD,MSE?
    数据挖掘算法源代码:很好的参考资料
    python linecache模块读取文件用法详解
    python读取文件指定行
  • 原文地址:https://www.cnblogs.com/yangever/p/5754217.html
Copyright © 2011-2022 走看看