python基础4-集合/函数
-
列表list/元组tuple/字典dict-作业
- print("aaa", sep = "搞", end=""),print("bbb"),输出的aaa和bbb处于同一行,且用搞分割
- li = ['alex', 'eric',123],li[2]= str(li[2]),v = "_".join(li),先将123转换为字符串,然后再拼接起来。或者写个for循环,将每个元素转换为字符串再拼接
-
enumerate(sequence, [start=0]),seq是任意可迭代对象,如列表,元组,字符串,start是下标开始标号,默认为0
-
定义变量的根本目的是记录状态的变化
- name = 'sb',name = ‘alex’,id(name)可以取得name所存数据在内存中的地址编号
- 不可变类型,重新给变量赋值,必须新开辟地址:字符串,数字,元组
- 可变类型,重新给变量赋值,id地址不变:列表,字典
- 顺序访问:字符串,列表,元组
- 映射访问:字典无序
- 直接访问:数字
- 容器类型:列表,元组,字典
- 原子类型:字符串,数字
-
集合
- 不同元素组成,集合无序,元素必须是不可变类型,s = {1,2,3,4,5}
- 另一种定义方式s= set('hello'),s中包括('o','h','l','s')
- s.clear(),清空集合
- s1 = s.copy()
- s.pop(),随机删除集合中元素
- s.remove(''sb),删除集合中的元素'sb',不存在会报错
- s.discard('sbbb'),删除不存在的元素时不报错
- 交集,p_s.intersection(l_s),等价于p_s&l_s,求ps和ls的交集
- 并集,p_s.union(l_s),等价于p_s|l_s,求ps和ls的并集
- 差集,p_s.difference(l_s),等价于p_s -l_s,求得ps中有,ls没有的元素
- 交叉补集,并集-交集。p_s.symmetric_difference(l_s),等价于p_s^l_s
- p_s.difference_update(l_s),等价于p_s = p_s-l_s,即将差集更新为ps
- s1.isdisjoint.(s2),如果集合s1和s2无交集,则返回true
- s1.issubset(s2),如果s1是s2的子集,则返回true
- s1.update(s2),将s1更新为s2一致,update()的括号中必须是可迭代对象,如元组,列表,字典,字符串。用于一次新增多个元素
- 集合是可变的。但是frozenset()是定义不可变集合。
- 简单去重方法,列表转换为集合,s = set(names),然后集合转换为列表names = list(s),得到无序的去重列表
-
字符串格式化
- msg='i am %s my hobby is %s' %('1hf','alex'),将后两个数据传给前两个%s
- %s,后边可以接数字,可以接列表。
-
s = 'percent %.4s'%'abscdsf'#取前4位
- 在该写%d的位置,写%s,会导致程序可读性变差
- 打印浮点数,percent %.2f %%。打印至小数点后两位,并显示一个%
- 在python中,单引号和双引号没有区别
- tp1 = i am %(name)s age %(age)d %{'name':'alex', ' age':'18'},将字典的value赋值给对应的key
-
msg = 'i am %(name) -60s my hobby is alex' %{'name':'1hf'} print(msg)
#flags,取60位并左对齐。+是右对齐 -
msg = 'i am \033[45;1m%(name)+60s\033[0m my hobby is alex'%{'name':'1hf'} print(msg)
#打印时有颜色 - print('root','x','0','0',sep=':'),用:将几部分连接起来
-
format字符串格式化
- tp1 = "i am {2}, age {1}, {0}".format("seven",18,'alex'),将format后的值按照012的顺序分别传给前边
-
tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18)
tpl = "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18})
**代表取字典的内容 -
tpl = "i am {:s}, age {:d}, money {:f}".format("seven", 18, 88888.1) tpl = "i am {:s}, age {:d}".format(*["seven", 18])
*相当于取列表的内容 -
tp1 = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%},{}".format(15, 15, 15, 15, 15, 15.87623, 2)
b是二进制,o是八进制,d是整数,xX是小写大写十六进制,%是显示成百分比 -
函数
- 函数定义时不需要形参,在调用时就不要给实参,否则报错
- print(test),打印出函数test的地址
- 如果定义了两个重名的函数,则后一个自动覆盖前一个,即调用后一个函数
- 过程就是没有返回值的函数。python中没有过程,即不定义返回值的情况下,python会返回None
- 函数返回值如果>1,返回tuple
- 位置参数,即实参与形参一一对应,缺一或多一不行
- 关键字参数,位置无顺序,找对应的关键字形参赋值,缺一或多一不行
- 位置参数一定要在关键字参数的左边,以下OK
def test(x,y,z): print(x) print(y) print(z) test(1,z=2,y=4)
- 默认参数,如果实参不传值,则默认
- **跟字典有关系,*跟列表/元组有关系。没有加*,代表将一个整体传给函数的*args。如果加*,则遍历列表,将其挨个传入函数
- *args传位置参数,返回一个元组。**kwargs传关键字参数,返回字典
- def test(x,*args,**kwargs):符合大原则,位置参数必须在关键字参数的左边。能接受任意形式的参数