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