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)