Python学习Day2

1.集合

集合特性:

(1)去重,创造一个集合的时候自动剔除了重复项。

(2)关系测试,测试两组数据之间的交集,并集,差集,对称差集,子集等关系。

 1 list_1 = [1,2,3,4,5,2,3,5,7]
 2 list_1 = set(list_1)
 3 
 4 list_2 = set([2,5,8,9])
 5 print(list_1,list_2) #集合也是无序的,可以去重
 6 
 7 print(list_1.intersection(list_2))  #交集
 8 print(list_1 & list_2)              #符号表示交集
 9 
10 print(list_1.union(list_2))         #并集
11 print(list_1 | list_2)              #符号表示并集
12 
13 print(list_1.difference(list_2))    #差集
14 print(list_1 - list_2)              #符号表示差集
15 
16 list_3 = set([1,2,3])
17 print(list_3.issubset(list_1))      #判断子集
18 print(list_1.issuperset(list_3))    #判断父集
19 
20 print(list_1.symmetric_difference(list_2))  #对称差集,互相都没有的组合在一起
21 print(list_1 ^ list_2)                      #符号表示对称差集
22 
23 print("------------------------")
24 list_4 = set([4,5,6])
25 print(list_3.isdisjoint(list_4))    #两集合没有交集返回true
26 
27 list_1.add(999)                     #添加一项
28 list_1.update([888,777,555])        #添加多项
29 list_1.remove(999)                  #移除一项
30 print(len(list_1))                  #长度
31 
32 print(list_1)
33 print(list_1.pop())                 #任意移除一项并返回
34 
35 list_1.discard()                    #删除元素的时候当元素存在的时候删除,不存在的时候do nothing
View Code

2.文件

a.模式:

(1) "r":只读,不可写。第一次读取文件的时候会到一个位置,第二次读取文件的时候会从上次的位置开始,而不是从头开始

(2)"w":只写,不可读,会打开一个新的文件,覆盖掉之前的文件(慎重使用)

(3)"a":只写,不可读,会在原来的文件后面进行追加

1 #f = open("apologize",'r+',encoding="utf-8")  #文件句柄 读写
2 #f = open("apologize",'w+',encoding="utf-8")  #文件句柄 写读
3 #f = open("apologize",'a+',encoding="utf-8")  #文件句柄 追加读写
4 #f = open("apologize",'rb')  #文件句柄 二进制文件 (网络传输)
5 f = open("apologize",'wb')
6 f.write("hello binary
".encode())  #字符写入二进制的时候会出现问题,需要转化为二进制
7 f.close()
View Code

b.注意点:

(1)每次操作完文件之后一定要f.close()

c.方法:

1 print(f.tell())        #得出此时读到的光标的位置
2 print(f.tell())        #按字符来计数
3 f.seek(0)              #回到指定位置
4 print(f.encoding)      #打印文件编码
5 print(f.fileno())      #返回文件句柄在系统的编号
6 print(f.flush())       #强制刷新,强制将数据存储到硬盘中
7 print(f.closed)        #判断文件是否关闭
8 f.truncate(10)         #从头开始截断
View Code

d.进度条实现:

1 import sys,time
2 
3 for i in range(50):
4     sys.stdout.write("#")       #在一行中写,不会换行
5     sys.stdout.flush()          #强制刷新(因为内存会缓存满数据之后再存储到硬盘中,加一个
6                                 #强制刷新,可以实时的将数据存储到硬盘中)
7     time.sleep(0.2)             #时间延迟
View Code

e.文件修改:

修改文件的方法是重新写入一个新的文件,通过一个循环,在原文件中判断,然后replace替换

 1 f = open("apologize",'r',encoding="utf-8")
 2 f_new = open("apologize.bak",'w',encoding="utf-8")
 3 
 4 for line in f:
 5     if "只能沉默无言" in line:
 6         line = line.replace("只能沉默无言","有好多话说")
 7 
 8     f_new.write(line)
 9     
10 f.close()
11 f_new.close()
View Code

f.with:

with语句结束之后自动关闭文件

1 with open("apologize",'r',encoding="utf-8") as f:
2     for line in f:
3         print(line)
View Code

3.字符编码与转码:

参考文章:

http://www.cnblogs.com/luotianshuai/articles/5735051.html

http://www.cnblogs.com/yuanchenqi/articles/5956943.html

http://www.diveintopython3.net/strings.html

(1)Python3默认是Unicode编码

 1 # -*- coding: utf-8 -*-
 2 
 3 import sys
 4 print(sys.getdefaultencoding()) #查询默认编码方式
 5 
 6 s = "你好"
 7 s_gbk = s.encode("gbk") #Python默认是Unicode编码
 8 s_gbk_utf8 = s_gbk.decode("gbk").encode("utf-8")
 9 print(s.encode("gbk"))
10 print(s_gbk_utf8)
11 print(s.encode("utf-8").decode("utf-8").encode("gb2312"))
View Code

(2)编码转换图示:

4.函数:

 1 def func(x,y,z):
 2     print(x)
 3     print(y)
 4     print(z)
 5     
 6 func(1,y=2,z=3)   #位置参数不能在关键字参数前面
 7 
 8 #默认参数特点:调用函数的时候,默认参数非必须传递
 9 #用途:1.默认安装值
10 
11 #*args:接受n个位置参数,转换成元组的方式
12 #**kwargs:把n个关键字参数,转换成字典的方式
View Code

 a.函数特性:

(1)减少重复代码

(2)使程序变的可扩展

(3)使程序变的易维护

b.局部变量:

 1 age = 18
 2 
 3 def change_name(name):
 4     global age    #将局部变量的作用域改为全局变量
 5     age = 28
 6     print("before name:",name,age)
 7     name = "丑女" #这个函数就是这个变量的作用域,但是列表,集合,字典,类不受影响,可以修改
 8     print("after name:",name)
 9     
10 name = "mm"
11 change_name(name)
12 print(name,age)
View Code

c.递归:

(1)必须有一个明确的结束条件

(2)每次进入更深一层递归时,问题规模相比上次递归都应有所减少

(3)递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

原文地址:https://www.cnblogs.com/mumupa0824/p/7473771.html