一、SET集合
set集合是无序的,不重复的。
1.创建
第一种: s1 = {"123","456"} #集合用大括号包起来,字符串用逗号隔开 第二种: li = [11,22,33] s2 = set(li) #当执行set()的时候,实际上是调用set的__init__来对li里边的元素做一个for循环,然后转成set。 |
2.功能
1.s1.add() #增加元素 2.s1.clear() #清空集合内容 3.s1.copy()#浅复制 4.s1.difference #a中存在,b中不存在 5.s1.symmetric_difference #a中存在,b中不存在拿出来 和 b中存在,a中不存在拿出来(也称对称差级) 6.s1.difference_update #a中存在,b中不存在拿出来,然后重新赋值给左边的变量s1 7.s1.symmetric_difference_update #a中存在,b中不存在拿出来 和 b中存在,a中不存在拿出来,然后重新赋值给左边的变量s1 8.s1.discard #移除特定元素,如果没有元素不报错 9.s1.remove #移动特定元素,如果没有会报错 10.s1.pop #随机移除,把移除的值赋给变量 11.s1.intersection #取两个变量的交集(就是两个变量里边相同的元素) 12.s1.inteersection_update #取两个变量的交集,然后赋值给左边的变量s1 13.s1.isdisjoint #如果有交集,返回True,否则返回False 14.s1.issubset #一个变量是否是另一个变量的子序列 15.s1.union #并集,就是把两个变量的元素联合起来 16.s1.update #批量添加元素,接收一个可迭代的对象,例如:列表、元祖、字符串 |
3.集合练习题
有两个字典,现在要把新的字典里边的内容添加到旧的字典里,找出
1.应该删除的项
2.应该添加的项
3.应该更新的项
需求分析:
1.首先确定可以用set功能来实现
2.需要把字典的keys读取出来转成set集合
3.找出旧字典应该删除、添加、更新的项
#旧字典 old_dict = { '#1':8, '#2':4, '#4':2, } #新字典 new_dict = { '#1':4, '#2':4, '#3':2, } old_set = set(old_dict.keys()) #把旧字典keys转换成集合 new_set = set(new_dict.keys()) #把新字典keys转换成集合 remove_set = old_set.difference(new_set) #找出应该删除的 add_set = new_set.difference(old_set) #找出应该添加的 update_set = old_set.intersection(new_set) #找出应该更新的 print(remove_set,add_set,update_set) #打印找出的删除、添加、更新 输出: {'#4'} {'#3'} {'#1', '#2'} |
二、函数
函数分为自定义函数和内置函数
1、定义函数
1.函数关键字def 2.函数名 3.写个() 4.函数体(具体内容) 5.返回值 6.自定义的函数自己不被执行 例如: def aa(): 函数体 |
在PyCharm中可以点击代码左端空白处,可以打断点执行代码,查看代码执行流程。 |
2、执行函数返回值
函数利用try retrun来实现返回值。 def aa(): try : 函数体 except: return False #失败返回False else: return True #成功返回True 注意: 1.在函数中一旦执行了return,函数的执行过程立即终止,不会再往下走! 2.函数中如果没有指定return,默认python返回一个return值为None |
3、函数的基本参数
1.普通参数 #一一对应,严格按照顺序执行,将实际参数赋值给行为参数; 2.默认参数 #当函数执行的时候没有给变量赋值的时候,使用默认参数;设置默认参数的行为参数要放到最后,可以连着多个; 3.指定参数 #给指定的参数赋值 (函数冒号左边括号里边的叫做行为参数;执行函数的时候,括号里边的参数叫做实际参数。) |
4、函数的动态参数
1.行为参数之前加一个* 就可以接受多个实际参数(接收迭代参数列表、元组、字符串,不接收字典)输出格式为元祖,按顺序处理。 def f1(*args): print ("abc","123") 例一:当实际参数前不加*时,函数会把迭代参数整体作为一个元素放到元祖里。 def f1(*args): print (args) li = [11,22] f1(li) 输出:([11,22]) 例二:当实际参数前也加一个*时,函数会对迭代参数里边的所有元做一个for循环,然后赋值到元祖里; def f1(*args): print (args) li = [11,22] f1(*li) 输出:(11,22) 2.行为参数之前加两个* 就可以接受字典参数,输出格式为字典,处理key、values键值对 def f1(**args): print (args) f1('n1'='aaa','n2'='ddd') 输出:{'n1':'aaa','n2':'ddd'} 3.万能参数(就是*args和**kwargs一起使用,它会自动识别是列表还是字典,然后赋值给*args和**kwargs) |
5、利用动态函数实现format功能
格式:str.format 功能:实现格式化输出方法(同万能参数功能,都是通过*args和**kwargs) 例如:s = "i am {0},age{}".format('abc','123') (括号里边的abc和123也可以写成一个列表) s = "i am {0},age{}".format(*['abc','123']) 输出:i am abc,age 123 |
6、函数内容补充
例一: def f1(a1,a2): return a1+a2 def f1(a1,a2): #当运行到这里的时候f1已经重新赋值,内存段也不一样了, return a1*a2 result = f1(8*8) print (result) #所以结果是64 |
例二: python函数中,当传递参数的时候,python默认为引用参数,不是重新复制参数赋值。 def f1(a1): a1.append(111) li= [11,22] f1(li) #这里的li为引用,不是重新赋值 print (li) #结果为[11,22,999] |
7、全局变量
1.作用域内的变量只能作用域内使用; 2.全局变量所有作用域都可以读取,但不能修改; 3.局部变量优先于全局变量; 4.作用域要修改变量,需要在作用域中加global+变量名; 5.如果全局变量是列表或者字典时,作用域不加global可直接添加元素,但不能重新赋值;如果重新赋值,要加global+变量名; (注意:所有全局变量名要都用大写,方便区分) |
8、函数式编程实现登录和注册
三、三元运算(也称三目运算,if else的简写)
用来简单的if else的运用; 例如: 常规的写法: if 1 == 1: name = 'aaa' else: name = 'bbb' 三元运算写法: name = 'aaa' if 1 == 1 else 'bbb' |
四、lambda表达式
用作简单函数的简写,对简单的函数赋值做操作,只能写一行。 例如: def f1(a): return a+100 lambda写法: f1 = lambda 1: a+100 #return默认隐含了 |
五、内置函数
1. .abs() #取绝对值 2. .all() #接收可以被迭代的对象。当括号里所有为真时,为真;括号里只有一个为假时,就为假。 3. .any() #括号里只要有真,就为真。 4. .ascii() #自动执行某对象的的__str__方式 5. .bin() #接收十进制,然后转成二进制 0b代表二进制 6. .oct() #接收十进制,然后转成八进制 0o代表八进制 7. .nex() #接收十进制,然后转成十六进制 0x代表十六进制 8. .bool() #真或假、True或False 9. .bytes() #把字符串转成字节类型 例如:bytes(s,encoding"utf-8") 10. .bytearry() #把字符串转成字节类型,放到一个列表里。 |
五、文件操作
1.打开文件 f = open ('文件名字','什么方式') 打开文件的方式有: 1.r 只读 2.w 只写(清空之后再写) 3.x (如果文件存在,就报错;如果不存在,就创建再写内容) 4.a 追加 永远是追加到光标所在位置的最后 5.r+ 读写 6.w+ 先清空再写读 7.a+ 读写,但是永远是追加到最后 8.x+ 读写 9.b 以二进制的方式读写 10.b+ 2.操作文件(文件操作功能) 1.read() 2.tell() 3.seek() 4.write() 5.close() 6.flush() 7.readable() 8.seekable() 9.readline() 10.readlines() 11.truncate() 12.for循环文件对象 例如; f = open("aaa.txt",'r=') for line in f: #会把f里边的一行一行读取出来赋值给line print (line) 3.with 同时打开多个文件 with open("db1",'r',encoding="utf-8") as f1 ,open('db2','w',encoding="utf-8")as f2: 例一:同时打开两个文件,读取第一个文件,同时写入第二个文件,当写到10行时退出; with open("db1",'r',encoding="utf-8") as f1 ,open('db2','w',encoding="utf-8")as f2: times = 0 for line in f1: times += 1 if times <= 10: f2.write(line) else: break 例二:当有个文件,把文件里边的aaa改成bbb with open("db1",'r',encoding="utf-8") as f1 ,open('db2','w',encoding="utf-8")as f2: for line in f1: new_str = line.replace('aaa','bbb') f2.write(new_str) |