一. 集合 (无序,去重复,关系)
1. 创建集合
test = {"abc","def"}
test = set() #创建空集合
test = set([aa,bb,cc,dd]) #创建集合
2. 集合(set)方法
# add方法
s = set()
s.add(abc)
s.add(abc)
s.add(abc)
print(s)
#==> {abc}
# set不保存重复的项目,当add存在的项目,则不去添加
# 比较方法
# difference方法
s1 = {aa,bb,cc}
s2 = {bb,cc,dd}
diff = s1.difference(s2)
print(diff)
#==> {aa}
# s1对比s2,输出s1中存在且s2不存在的
# symmetric_difference
s1 = {aa,bb,cc}
s2 = {bb,cc,dd}
s = s1.symmetric_difference(s2)
print(s)
#==> {aa, dd}
# s1与s2对比,输出s1与s2互相不存在的值
# difference_update
s1 = {aa,bb,cc}
s2 = {bb,cc,dd}
s = s1.difference_update(s2)
print(s,s1,s2)
#==>None {aa} {cc, dd, bb}
# 此方法并不返回值,所以s值为none,直接将s1中存在s2中不存在值重新赋值给s1
# symmetric_difference_update
s1 = {aa,bb,cc}
s2 = {bb,cc,dd}
s = s1.symmetric_difference_update(s2)
print(s,s1,s2)
#==> None {aa, dd} {cc, dd, bb}
# 同样Update方法不返回值,将s1与s2互相不存在的值重新赋值给s1
# 移除方法
# discard
s1 = {aa,bb,cc}
s1.discard(aa)
s1.discard(dd)
print(s1)
# ==> {cc, bb}
#移除元素方法,移除不存在元素时,不报错
# remove
与discard相同,移除不存在元素,报错
所以建议使用discard
# pop
s1 = {aa,bb,cc}
s = s1.pop()
print(s)
print(s1)
#==> cc {aa,bb}
# 随机移除某个元素,并且获取这个元素
# 交集
# intersection 交集,求两set的交集
s1 = {aa,bb,cc}
s2 = {bb,cc,dd}
s = s1.intersection(s2)
print(s,s1,s2)
#==> {cc, bb} {cc, aa, bb} {cc, dd, bb}
# 并集
# union 并集
s1 = {aa,bb,cc}
s2 = {bb,cc,dd}
s = s1.union(s2)
print(s,s1,s2)
#==> {cc, bb, aa, dd} {cc, aa, bb} {cc, dd, bb}
# set集合可迭代更新
# update方法
s1 = {aa,bb,cc}
s1.update([dd,ff,66])
print(s1)
# ==> {cc, 66, aa, dd, bb, ff}
# Update方法可传入一个可迭代的对象
二. 函数(复用,返回值)
def s1():
print(‘hello world‘)
s1()
#显示:hello world
#函数的参数传入
def s1(name):
print(‘my name is %s‘%name)
s1(‘alax‘)
#显示:my name is alax
#函数的多参数调用(实参与形参相对应)
def s1(name,age,what):
print(‘my name is %s,age is %s, is %s‘%(name,age,what))
s1(‘alax‘,23,‘good man‘)
#显示:my name is alax,age is 23, is good man
#函数的不同位置实参的传入(需要给实参指定对应形参)
def s1(name,age,what):
print(‘my name is %s,age is %s, is %s‘%(name,age,what))
s1(age=18,what=‘good man‘,name=‘alax‘)
#显示:my name is alax,age is 18, is good man
#函数形参的默认值(含有默认值的形参必须放在最后)
def s1(name,age,what=‘good man‘):
print(‘my name is %s,age is %s, is %s‘%(name,age,what))
s1(age=18,name=‘alax‘)
#显示:my name is alax,age is 18, is good man
s1(age=18,what=‘bad man‘,name=‘alax‘)
#显示:s1(age=18,what=‘bad man‘,name=‘alax‘)
#函数的动态参数,会将实参放入元组中
def test(*args):
print(args,type(args))
test(‘abc‘)
#显示(‘abc‘,) <class ‘tuple‘>
#函数的动态参数,传入的实参为一组元素,将li整个列表放入元组中
def test(*args):
print(args,type(args))
li=[aa,bb,cc,de]
test(li)
#显示([aa, bb, cc, de],) <class ‘tuple‘>
#传入带一个*的列表,将li列表中的每个元素放到元组中
def test(*args):
print(args,type(args))
li=[aa,bb,cc,de]
test(*li)
#显示:(aa, bb, cc, de) <class ‘tuple‘>
test(*‘alex‘)
#显示:(‘a‘, ‘l‘, ‘e‘, ‘x‘) <class ‘tuple‘>
#总结:实参前加个‘*’相当于加了个for循环遍历实参的每个元素,并一一放入元组中
#动态参数形参含两个*,将键值对传入,并保存成字典的形式
def f2(**kwargs):
print(kwargs)
f2(n1=‘alex‘,n2=18)
#显示:{‘n1‘: ‘alex‘, ‘n2‘: 18}
dic={‘k1‘:‘v1‘,‘k2‘:‘v2‘}
f2(kk=dic)#{‘kk‘: {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘}}
#显示{‘kk‘: {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘}}
#万能参数
def f1(*args,**kwargs):
print(args)
print(kwargs)
f1(aa,bb,cc,dd,ff,k1=‘aa‘,k2=‘bb‘)
#运行结果(aa, bb, cc, dd, 123)
{‘k1‘: ‘aa‘, ‘k2‘: ‘bb‘}
#formate传参方式
#方式1
s1=‘i am {0},age{1}‘.format(‘alex‘,18)
print(s1)
#显示:i am alex,age18
#方式2
s2=‘i am {0},age{1}‘.format(*[‘alex‘,18])#传列表
print(s2)
#显示i am alex,age18
#方式3
s1=‘i am {name}, age{age}‘.format(name=‘alex‘,age=18)#字符串中name与age后面一定要加上name=‘’,age=进行指定
print(s1)
#显示:i am alex, age18
#方式4
dic={‘name‘:‘alex‘,‘age‘:18}
s2=‘i am {name},age{age}‘.format(**dic)#传字典要加**
print(s2)
#显示:i am alex,age18
#传过来的形参可使用方法不能重新赋值 ,建议全局变量名需大写
#传的是引用 不是复制
def f5(a1):
a1.append(‘abc‘)
li=[aa,bb,cc,dd]
f5(li)
#显示:[aa, bb, cc, dd, ‘abc‘]
1 #全局变量,所有的作用域,都可读,对全局变量进行【重新赋值】,需要加上global,特殊:列表,字典,可修改,不可重新赋值
2 def f1():
3 global name#表示name为全局变量
4 name=‘abc‘
5 print(name)
6
7 name=‘de6‘
8 f1()
9 #显示:abc