#!/usr/bin/env python
#集合操作,无序的
list_1 = [1,4,5,7,3,6,7,9]
list_1 = set(list_1)

list_2 = set([2,6,0,66,22,8])
#print(list_1,type(list_1))
print(list_1,list_2)
print(list_1.intersection(list_2))#查出重复的


#并集
print(list_1.union(list_2))#两个列表并在一起,去重

#差集
print(list_1.difference(list_2))#打印1,把list_2 里有的去掉
print(list_2.difference(list_1))#相反

#子集
print(list_1.issubset(list_2))#查看list_1是不是2的子集,打印true和false
print(list_2.difference(list_1))#是不是父集

#对称差集
print(list_1.symmetric_difference(list_2))#两个相互都没有的取出


print("--------------------------------------------------")
'''list_3 = [1,3,7]
list_4 = set([5,6,8,1])
print(list_3.isdisjoint(list_4))

print(list_3 & list_4)
'''

print(1 & 2) #交集
print(1 | 2) #并集
print(1 - 2) #求差集(项在t中,但不在s中)
print(1 ^ 2) #对称差集(项在t或s中,但不会同时出现在二者中)


'''list_1.add(999)#添加
list_1.update([111,222,333])#批量添加
print(list_1)
'''

'''list_1(list_1.pop())#删除随机
list_1(list_1.remove('dd'))#不在报错
print(list_1.discard(dd))#不存在,不会报错
'''

#基本操作:

#t.add('x') # 添加一项

#s.update([10,37,42]) # 在s中添加多项



#使用remove()可以删除一项:

#t.remove('H')


#len(s) set 的长度

#x in s
#测试 x 是否是 s 的成员

#x not in s
#测试 x 是否不是 s 的成员

#s.issubset(t)

#s <= t
#测试是否 s 中的每一个元素都在 t 中

#s.issuperset(t)
#s >= t
#测试是否 t 中的每一个元素都在 s 中

#s.union(t)
#s | t
#返回一个新的 set 包含 s 和 t 中的每一个元素

#s.intersection(t)
#s & t
#返回一个新的 set 包含 s 和 t 中的公共元素

#s.difference(t)
#s - t
#返回一个新的 set 包含 s 中有但是 t 中没有的元素

#s.symmetric_difference(t)
#s ^ t
#返回一个新的 set 包含 s 和 t 中不重复的元素

#s.copy()
#返回 set “s”的一个浅复制

#文件操作
#data = open("文件",encoding="utf-8").read()#utf-8把文件打开
#print(data)

'''f = open("文件",'r',encoding="utf-8")#文件句柄 ,'w'会创建一个新文件 之前重名的文件会被清空
data = f.read()
data2 = f.read()
print(data)
print('----------data2-----------',data2)
f.close()
#读文件

f = open("文件",'w',encoding="utf-8")#文件句柄
f.write("呵呵,\n")
f.write("嘻嘻")
f.close()
#写,不可读

f = open("文件",'a',encoding="utf-8")
#文件句柄,'a'追加,不可读
'''
#low 循环
'''f = open("文件",'a',encoding="utf-8")

for index,line in f.readlines():#.readlines()适合读小文件
if index == 9:#打印到第九行
continue
print(line.strip())#.strip去掉换行符
'''

#for i in range(5):
# print(f.readlines())#打印5行

'''f = open("文件",'a',encoding="utf-8")
count = 0
for line in f:
if count == 9:
print('-----------分割线---------')
count += 1
continue
print(line)
count += 1
'''#好循环

'''f = open("文件",'a',encoding="utf-8")
print(f.tell())#打印当前的位置(光标)
print(f.seek(10))#调到指定位置
print(f.readline())#
print(f.encoding)#打印文件编码
print(f.errors)#做异常处理用的
print(f.fileno())#返回一个编号
print(f.name)#打印文件名字
print(f.seekable())#判断文件是否能移动到指定位置
print(f.flush())#强制刷新
'''
#进度条
'''import sys,time
for i in range(50):
    sys.stdout.write("###")
    sys.stdout.flush()
    time.sleep(0.1)
'''#“#”进度条
View Code

'''f = open("文件",'a',encoding="utf-8")
#f.truncate()#不写就是清空
f.seek(10)#先调到10,再开截断,但是还是重头开始截断,移动不好使。
f.truncate(20)#从文件开头开始截断
'''

f = open("文件",'a',encoding="utf-8")
#r+ 可读可写,w+ 写读,先创建一个文件在写,a+ 追加、写、读,rb 以二进制文件读,但不能加utf-8参数。
#python3.0,在网络传输中只能用二进制文件传送,wb 是写,写时得加.encoding(utf-8)
#print(f.readline())
#print(f.readline())
#print(f.readline())#打印前三行
#f.write("--------------ssss-----------")#从最后开始写

'''f = open("abc",'r',encoding="utf-8")
f_new = open("abc.bak",'w',encoding="utf-8")
for line in f:
if "刘东" in line:
line = line.replace("刘东","刘演生")
f_new.write(line)
f.close()
f_new.close()
'''#文件修改方法,先写到一个新文件里

#字符编码与转码
import sys
#print(sys.getdefaultencoding())#默认编码
'''s = "你好"
s_to_unicode = s.decode("utf-8")
print(s_to_unicode)
s_to_gbk = s_to_unicode.encode("gbk")
print(s_to_gbk)
'''#python2.0版本
#unicode和utf-8是可以相互的,Unicode和gdk必须转换

#函数
#优势:利于扩展 减少单码 --
#1、面向对象
#2、面向过程
#3、函数式编程
#函数定义方法:
'''
#函数
def liu ():
    """hai_shu_miao_shu"""
    print('abcdefg')
    return 0
View Code

#过程(就是没有返回值的函数!)
def dong ():
    """miao_shu"""
    print('1234567')
x = liu()
y = dong()
print('----is %s' %x)#返回值为’0‘
print('----is %s' %y)
View Code

#函数式编程
#例一、
import time
def log():
    time_format = '%Y-%m-%d %X'
    time_current = time.strftime(time_format)
    with open('abc.bak','a') as f:
        f.write('%s log-log-log\n' % time_current)
def test_1 ():
    print('in the test_1')
    log()
def test_2 ():
    print('in the test_2')
    log()
def test_3 ():
    print('in the test_3')
    log()
test_1()
test_2()
test_3()
'''#调用函数
View Code


#例二、
'''def test(x,y):#x,y表示形式参数
    print(x)
    print(y)
test(1,2)#实际真实参数,和形参一一对应
#test(y=2,x=1) 关键字调用,与形参顺序无关
'''
View Code

#默认参数
'''def test (x,y=2):#def test (host,port=3306):
print(x)
print(y)
test(1,3) #1 复制给了x,y也可以手动复制,默认复制权限低。
#默认参数特点:调用函数的时候,默认参数非必须传递
'''
#参数组(实参不固定的情况下,怎么设置形参)
'''def test(*args):
print(args)
test(1,2,3,4,5,6,) #打印出是元祖的形式
#test(*[1,2,3,4,5,6])#args=tuple([1,2,3,4,5,6])

def test(x,*args):
print(x)
print(args)
test(1,2,3,4,5,6)
'''

#**kwargs:把n个关键字参数,转换成字典的方式
''' test(**kwargs):
print(kwargs)
# print(kwargs['name'])
# print(kwargs['age'])
test(name='liudong',age='23')

def test1 (name,**kwargs):
print(name)
print(kwargs)
test1('liudong',age='23',)
def test(name,age=18,*args,**kwargs):
print(name)
print(age)
print(args)
print(kwargs)
test('liudong',age=100,sex='m',aa='aa') #*args会是个空值
'''

#局部变量
'''school = "Oldboy edu." #全局
def change_name(name):
global school #,外面有全局变量,改全局,最好不用此操作,如果外面没有全局变量,此操作会被开除的
school ="mage Linux"
print("before change",name,school)
name = 'liudong' #局部
print("school")
change_name(name='liu')
print(school)
'''
#递归
'''def calc(n):
print(n)
if int(n/2) >0:
return calc(int(n/2))
print("->",n)
calc(10)
'''

#函数式编程

#高阶函数
#一个函数传递给另一个函数,成为高阶函数
'''def add(a,b,f):
return f(a)+f(b)
res=add(3,-6,abs)
print(res)
'''
#字符串转字典:a = {ddfdfdfsdfs} eval(a) a['?']