1、基础数据类型set的介绍
与dict,list,tuple相比,set,是一个不可有重复元素的,可修改,可循环,无序的集合。创建方式有两种
a={1,21,3} b=set("ab") print(a,b)
list,str,tuple都可以直接转为set,比如列表
l=[1,2,3,1] s=set(l) print(s)
在set里添加元素
e=set() se.add(44) print(se)
求a集合中存在但是b不存在的方法
a={11,22,33} b={22,55} c=a.difference(b) print(c) {33, 11}
求a集合中存在但是b不存在并更新自己的方法
a={11,22,33} b={22,55} c=a.difference_update(b) print(c) print(a) None {33, 11}
删除元素的方法有两种
a={11,22,33} a.remove(22) a.discard(22) print(a)
如果要求删除的元素在set没有,remove是会报错的,discard不会,pop为移除,可赋值给其他变量,删除则不行。
取交集,以及取交集并且把交集更新成自己
a={11,22,33} b={22,44,55} c=a.intersection(b) print(c) a.intersection_update(b) print(a)
{22}
{22}
查看a是否是b的子序列,如果是,返回true否则fales
a={11,22,33} b={22,44,55} c=a.issubset(b) print(c) False
是否为父序列
a={11,22,33} b={22,11} c=a.issuperset(b) print(c) True
取对称并集
a={11,22,33} b={22,11,44} c=a.symmetric_difference(b) print(c) {33, 44}
更新一个新的集合
a={11,22} b={44,55,66} a.update(b) print(a) {66, 11, 44, 22, 55}
2、三元运算的使用result
=
值
1
if
条件
else
值
2
a="hello" if 1==1 else "world" print(a) hello
3、深浅copy
由于python内部优化的机制下,int和str无论深浅copy,他们的内存不变,对于字典,列表等,浅拷贝只能拷贝最外边一层,如果有嵌套这也可能会导致拷贝之后内存地址不同,深copy除了最后一层,其余完全copy。
import copy a=["adc","fff",{"k":"v"}] b=copy.copy(a) print(a,b) print(id(a)) print(id(b)) ['adc', 'fff', {'k': 'v'}] ['adc', 'fff', {'k': 'v'}] 18408456 10636296
4、函数
在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处。
def 函数名(参数): ... 函数体 ... 返回值
def:创建函数的关键字
函数名:就是函数的名字 ,创建之后可以根据函数名调用函数
函数体:函数的可执行程序
参数:为函数提供具体的数据,分为形参和实参。
返回值:函数执行完毕之后给调用者返回的数据。
传参默认是按照顺序传,如果指定形式,比如形参=实参的方式,可以不按照顺序,
函数可以有默认参数,有默认参数的话,默认参数一定要放在参数的尾部。
函数动态参数使用方法一,可以穿任意个参数,
def a(*b): print(b) a(123,456) (123, 456)
二,接受字典类型数据参数
def a(**b): print(b) a(c=123,b=456) {'c': 123, 'b': 456}
直接将字典带入的接收方式为
def f1(**args): print(args) dic={"k1":"v1","k2":"v2"} f1(**dic) {'k2': 'v2', 'k1': 'v1'}
全局变量和局部变量的区别在于一个在全局生效,一个只是在自己代码块的程序里生效,如果要在局部修改全局变量,请加global
a = 123 def f1(): global a a = 456 print(a) f1() 456