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)