python三个必知知识点
- +、+=、extend()之间的区别与应用场景
首先看测试用例:
1 # 创建一个序列类型的对象 2 my_list = [1, 2, 3] 3 # 将现有的序列合并到my_list 4 extend_my_list = my_list + [4, 5] 5 6 print(extend_my_list) # [1, 2, 3, 4, 5] 7 # 将一个元组合并到这个序列 8 extend_my_list = my_list + (6, 7) 9 # 抛出异常 TypeError: can only concatenate list (not "tuple") to list 10 print(extend_my_list) 11 12 # 使用另一种方式合并 13 extend_my_list += (6, 7) 14 print(extend_my_list) # [1, 2, 3, 4, 5, 6, 7] 15 16 # 使用extend()函数进行合并 17 18 extend_my_list.extend((7, 8)) 19 print(extend_my_list) # [1, 2, 3, 4, 5, 6, 7, 7, 8]
由源代码片段可知:
1 class MutableSequence(Sequence): 2 3 __slots__ = () 4 5 """All the operations on a read-write sequence. 6 7 Concrete subclasses must provide __new__ or __init__, 8 __getitem__, __setitem__, __delitem__, __len__, and insert(). 9 10 """ 11 # extend()方法内部使用for循环来append()元素,它接收一个可迭代序列 12 def extend(self, values): 13 'S.extend(iterable) -- extend sequence by appending elements from the iterable' 14 for v in values: 15 self.append(v) 16 # 调用 += 运算的时候就是调用该函数,这个函数内部调用extend()方法 17 def __iadd__(self, values): 18 self.extend(values) 19 return self
- python列表推导式
列表生成式要比操作列表效率高很多,但是列表生成式的滥用会导致代码可读性降低,并且列表生成式可以替换map()和reduce()函数。
1 # 构建列表 2 my_list = [x for x in range(9)] 3 print(my_list) # [0, 1, 2, 3, 4, 5, 6, 7, 8] 4 # 构建0-8中为偶数的列表 5 my_list = [x for x in range(9) if(x%2==0)] 6 print(my_list) # [0, 2, 4, 6, 8] 7 # 构建0-8为奇数的列表,并将每个数字做平方运算 8 def function(number): 9 return number * number 10 my_list = [function(x) for x in range(9) if x%2!=0] 11 print(my_list) # [1, 9, 25, 49]
生成器表达式
生成器表达式就是把列表表达式的中括号变成小括号。
1 # 构造一个生成器 2 gen = (i for i in range(9)) 3 # 生成器可以被遍历 4 for i in gen: 5 print(i)
生成器可以使用list()函数转换为列表:
1 # 将生成器转换为列表 2 li = list(gen) 3 print(li) 4 字典推导式 5 d = { 6 'tom': 18, 7 'alice': 16, 8 'bob': 20, 9 } 10 dict = {key: value for key, value in d.items()} 11 print(dict) # {'tom': 18, 'alice': 16, 'bob': 20} 12 ``` 13 Set集合推导式 14 ``` 15 my_set = {i for i in range(9)} 16 print(my_set) # {0, 1, 2, 3, 4, 5, 6, 7, 8}
- python上下文管理器with语句与contextlib简化上下文管理器with语句与contextlib简化
普通的异常捕获机制:
1 try: 2 pass 3 except Exception as err: 4 pass 5 else: 6 pass 7 finally: 8 pass
with简化了异常捕获写法:
1 class Demo(object): 2 3 def __enter__(self): 4 print("enter...") 5 return self 6 7 def __exit__(self, exc_type, exc_val, exc_tb): 8 print("exit...") 9 10 def echo_hello(self): 11 print("Hello, Hello...") 12 13 with Demo() as d: 14 d.echo_hello() 15 16 # enter... 17 # Hello, Hello... 18 # exit...
1 import contextlib 2 3 # 使用装饰器 4 @contextlib.contextmanager 5 def file_open(file_name): 6 # 此处写__enter___函数中定义的代码 7 print("enter function code...") 8 yield {} 9 # 此处写__exit__函数中定义的代码 10 print("exit function code...") 11 12 with file_open("json.json") as f: 13 pass 14 15 # enter function code... 16 # exit function code...
请使用手机"扫一扫"x
分类:
python基础全集
【推荐】FlashTable:表单开发界的极速跑车,让你的开发效率一路狂飙
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DbContext是如何识别出实体集合的
· 一次 .NET 性能优化之旅:将 GC 压力降低 99%
· MySQL索引完全指南:让你的查询速度飞起来
· 一个字符串替换引发的性能血案:正则回溯与救赎之路
· 为什么说方法的参数最好不要超过4个?
· 一次 .NET 性能优化之旅:将 GC 压力降低 99%
· 32岁入行STM32迟吗?
· C#.Net筑基-泛型T & 协变逆变
· 花150元,我用 AI 做出了千万播放的爆款视频!保姆级教程+完整提示词
· 【EF Core】DbContext是如何识别出实体集合的