第二章节:集合、文件、字符编码、函数

时间:2021-07-05 16:08:05

笔记笔记

来自一个没空学习的菜鸡大学生,加油

 

1.字符串只能全部的进行覆盖修改,不能调一两个字母修改

2.字典可以嵌套列表

1 zidian = {"name":"xlm","age":15,"hobby":["woman","gril","famale"]}
2 print (zidian)

  第二章节:集合、文件、字符编码、函数

3.列表则可以嵌套任何东西,包括字典、元组

1 zidian = {"name":"xlm","age":15,"hobby":["woman","gril","famale"]}
2 print (zidian)
3 list_1 = ["xlm","bc",520,zidian]
4 print ("\n",list_1)

 

结果

第二章节:集合、文件、字符编码、函数

4.字典不用保存下标

  • 字典是无序的
  • 因为key必须是唯一的,所以天生去重

 

集合操作:

1.把一个列表转成集合:

1 list_1 = [1,4,5,8]
2 list_2 =set(list_1)
3 
4 print (list_1,"\n",list_2)

结果:

    第二章节:集合、文件、字符编码、函数

2.集合的算法

第二章节:集合、文件、字符编码、函数
1 a = set([3,5,9,10])      #创建一个数值集合  
2   
3 b = set("Hello")         #创建一个唯一字符的集合 
4 
5 print(a&b)                 #打印他们的交集
6 print(a|b)                  #打印他们的并集
7 print(a-b)                   #打印前者对于后者的差集
8 print(a^b)                  #打印他们的对称差集(打印他们每个特有的,一样的不会打印)
第二章节:集合、文件、字符编码、函数

 

除了这些简便的还有一些花里胡哨的:

交集

Print(list_1.intersection(list_2))

并集

Print(list_1.union(list_2))

差集

Print(list_1.difference(list_2))

检测前者是不是后者的子集

Print (list_1.issubset(list_2))

检测前者是不是后者的父集

Print(list_1.issuperset(list_2))

有交集返回false

print (list_1.isdisjoint(list_2))

.

增删改查:

 

增加

list_1.add(66) 

一下加很多

List_1.update([88,77,66])

删除 

List_1.remove()括号写参数 没有参数会报错

List_1.pop()           括号内空白随机删,要填参数会报错

List_1.discard()      内部写参数,没有不报错

测试x是不是s的成员

X in s

检测x是不是不是s的成员

X not in是

检测x是不是每个元素在s中

x.issubset(s)

 

文件:

 

对文件操作流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件 

 

读写文件指令:

1 f = open("ceshi.py","r",encoding="utf-8")  #f取到的值是这个文件的句柄
2 #           程序名字     选择模式        选择字符编码

 

 

打开文件的模式有:后两种(u,b)不常用

 

  • 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.readline()   只读这个文件的第一行

读多行,可以使用for循环,如

 

第二章节:集合、文件、字符编码、函数
for line in range(5)
   print(f.readline())#打印五行

for line in f.readlines():
     print(line)    #全部打印出来

 
第二章节:集合、文件、字符编码、函数

 

效率最快,最节省空间的读取方法,就是读一行关一行: 

1 for line in f.readlines()

2 print(line) 

 

文件常常使用的    .后缀

f.tell 字符的个数

f,seek() 回到那个位置

f.name() 打印f文件的名字

f.isatty()检测是不是终端设备常见的有显示器打印机等

f.seekable() 判断是不是能够移动

f.readable()

f.writeable()  判断是不是可以读写

f.flush() 刷新 

f.close 是不是关闭了

f.truncate(20)从开头开始截出20个数字出来

 

使用time模块和刷新,设置一个进度条

 

第二章节:集合、文件、字符编码、函数
1 import sys,time
2 
3 for i in range(20):
4     sys.stdout.write("0")
5     sys.stdout.flush()
6     time.sleep(0.1)
第二章节:集合、文件、字符编码、函数

结果

第二章节:集合、文件、字符编码、函数

 下面的零逐个打印,相隔时间确定

 

with open 语句

 实现即时打开即时关闭

第二章节:集合、文件、字符编码、函数
with open ("file name","mode",encoding="utf-8 or anyone") as f:
#上面的的代码就相当于
#这个这个   f = ("file name","mode",encoding="utf-8 or anyone")
   for line in f
   print("line")

#标准的这么写
with open ("ceshi.py","r",encoding="utf-8") as f:
    for line in f:
        print(line)
第二章节:集合、文件、字符编码、函数

结果就是将文件一行一行打印了出来

 

 

 字符编码转换

第二章节:集合、文件、字符编码、函数

print(s)

print(s.encode("gbk"))  解码成gbk

print(s.encode("utf-8")) 解码成utf-8

print(s.encode("utf-8").decode("utf-8").encode("gb2312"))

     解码          解码          再次解码

print(s.encode("gb2312"))解码成utf-8

 

print(s.encode("gb2312").decode("gb2312"))打印出来是中文,相当于解码又编码


 

编码(告诉他本来是啥直接转换成uncode)

解码(告诉他你要从uncode转成啥)

 

函数

面向对象 类 class

面向过程 过程 def

函数式编程 函数 def

 

定义一个函数

def okok_1():#函数名字叫okok_1
    print("one")#函数内容
    return 0     #函数的返回值(不一定有没有返回值)

 

 

过程式函数可以理解为一个没有返回值的函数

 

调用时间模块实现日志功能:

 

第二章节:集合、文件、字符编码、函数
 1 import time 
 2 def loggeer():
 3     time_format = "%y--%m--%d--%x"
 4     time_current = time.strftime(time_format)
 5     with open ("ceshi.py","a+",encoding="utf-8") as f:
 6         f.write("\n%s end"%time_current)
 7         
 8 def text_1():
 9     print ("第一个")
10     loggeer()
11     
12     
13 text_1()
第二章节:集合、文件、字符编码、函数

 

return 0:

返回一个值,同时可以标志着一个值得结束

返回的值可以是none 可以返回列表、字符串、字典等

 

参数函数:

def text(x,y)

    print (x)

    print(y)

调用这个函数的时候可以直接将实际参数写入

如 text(1,2)既可以代表x=1,y=2

这个参数不能多也不能少

可以调用时这样:text(y=2,x=1)

 而且关键参数不能写在位置参数前面:

可以text(1,y=2)

 不可以text(x=1,2)

当然也不可以text(1,x=2)

 

 默认参数

def text (x,y=3)

在调用这个程序时,如果y不写实际参数那么y就采用默认值也就是2

注意:在使用默认参数的时候,默认的参数要在未知的参数的后面

 

*args 和 **kwargs

Def test2 (x,*args)

  这时候的x存第一个值后面的值都以元组的形势存在或者说传递到后面

def test2(x,**kwargs)

  在储存完x之后,后面的值都以关键字函数储存为了字典的形式

*args是说将接收到的多个位置参数,转换为元组的形势

**kwargs 是说将接收到的多个关键字参数,转换为字典的形式

 

局部变量和全局变量

局部变量

函数中的变量,出了这个函数那么这个变量就不存在了

全局变量

在所有代码的顶层变量就是全局变量

 

 全局变量的列表,字典变量可以在局部函数中被更改。但是字符串,数值,元组不能被修改

 

递归程序:

自己的程序还没有完成就调用自己的程序

第二章节:集合、文件、字符编码、函数
1 def calc(n):
2     print(n)
3     if int(n/2>0):
4         return calc(int(n/2))
5     print("--->","完成")
6     
7 calc(10)
第二章节:集合、文件、字符编码、函数

结果

第二章节:集合、文件、字符编码、函数

 

Eval可以将一个字符串转成这个字典

 

第二章节:集合、文件、字符编码、函数
1 message = '''
2 {'name':'xlm',
3 'age':'14',
4 'hobby':'["woman","gril","female"]'}
5 '''
6 
7 message = eval(message)#将字符串转换成字典
8 print (message)
9 print (message['name'])

第二章节:集合、文件、字符编码、函数

 结果

j第二章节:集合、文件、字符编码、函数