type
status
date
slug
summary
tags
category
icon
password
字典就是哈希表
异常处理
常见的Python内置异常
以下是一些常见的内置异常类型:
Exception:所有内置异常的基类。
- Exception:所有内置异常的基类。
SyntaxError:语法错误。
- SyntaxError:语法错误。
TypeError:不正确的类型。
- TypeError:不正确的类型。
ValueError:传入无效的参数。
- ValueError:传入无效的参数。
IndexError:序列(如列表)中没有此索引。
- IndexError:序列(如列表)中没有此索引。
KeyError:映射中没有此键。
- KeyError:映射中没有此键。
AttributeError:对象没有此属性。
- AttributeError:对象没有此属性。
ZeroDivisionError:除数为零。
- ZeroDivisionError:除数为零。
IOError / OSError:输入/输出操作失败。
- IOError / OSError:输入/输出操作失败。
ImportError:导入模块失败。
- ImportError:导入模块失败。
FileNotFoundError:文件未找到。
- FileNotFoundError:文件未找到。
写一个创建一个函数,接收一个字符串列表,返回所有长度大于5的字符串(使用列表推导式)
strings: list[str]:参数是一个字符串列表。
- strings: list[str]:参数是一个字符串列表。
- > list[str]:函数返回一个字符串列表。
这个字符串列表的名字叫做strings
创建并更新配置管理函数
1.读取脚本
2.读取和修改json
异步操作
- synchronous (Blocking): You place an order and wait at the counter until your food is ready before doing anything else.
- Asynchronous (Non-Blocking): You place an order, then you can continue chatting with friends, and when your food is ready, you’re notified to pick it up.
Event Loop: Think of it as the manager that keeps track of all the tasks. It knows what needs to be done and when to do it.
- Event Loop: Think of it as the manager that keeps track of all the tasks. It knows what needs to be done and when to do it.
- Coroutines: These are like workers that perform tasks. They can pause and resume, allowing other workers to do their jobs in the meantime.
- async and await:
- async is used to define a coroutine.
- await is used to pause the coroutine until a task is completed, allowing others to run.
Even though each fetch_data call takes 2 seconds, they all run concurrently. The total time taken is just over 2 seconds instead of 6 seconds if done synchronously.
装饰器
Think of decorators as wrappers that add functionality to your existing functions in a clean and reusable way.
-》
Imagine you have a plain cake (your original function). You can use different decorators (frosting, sprinkles, toppings) to enhance its appearance and flavor without changing the cake itself. Similarly, decorators add features to your functions without altering their core logic.
为什么需要 def decorator(func)?
带参数与不带参数的装饰器区别
- 不带参数的装饰器:直接接收被装饰函数,并返回包装函数。
- 带参数的装饰器:先接收装饰器参数,返回装饰器函数,然后该装饰器函数再接收被装饰函数并返回包装函数。
具体原因
- 参数传递:
- 当装饰器需要参数(如 permission)时,必须先定义一个外层函数来接收这些参数。
- 这个外层函数会返回实际的装饰器函数,后者再接收被装饰的函数。
- 功能分离:
- 装饰器工厂负责处理装饰器的参数。
- 装饰器函数负责接收被装饰函数并返回包装函数。
- 包装函数负责在调用被装饰函数前后执行特定逻辑。
想象一下,您要制作一个带有特别装饰(装饰器参数)的蛋糕(被装饰的函数):
- 装饰器工厂:接收装饰蛋糕的参数(如糖霜颜色)。
- 装饰器:根据糖霜颜色,设计装饰方案。
- 包装函数(装饰过程):实际将糖霜涂在蛋糕上。
上下文管理器
A Context Manager in Python is a construct that allows you to allocate and release resources precisely when you want. The most common use case is managing file operations, ensuring that files are properly opened and closed, even if errors occur during processing.
With Context Manager: Imagine a door that automatically locks after you pass through. You don't need to remember to lock it; the mechanism takes care of it for you.
Key:
- with Statement: The syntax used to wrap the execution of a block with methods defined by a context manager.
- __enter__ Method: Defines what should happen when entering the context.
- __exit__ Method: Defines what should happen when exiting the context, including handling exceptions.
- __init__: Initializes the context manager with the filename and mode.
- __enter__: Opens the file and returns the file object. This is executed at the start of the with block.
- __exit__: Closes the file. This is executed when exiting the with block, regardless of whether an exception occurred
定义生成器函数:在函数中,yield 之前的代码相当于 __enter__ 方法,yield 之后的代码相当于 __exit__ 方法。
因为我们需要创建一个上下文管理器需要定义一个包含 enter 和 exit 方法的类,这个相当于直接省去了。
- 目的:简化创建上下文管理器,使其比定义类更容易和更简洁。
- 工作原理:通过生成器函数,将 yield 前的代码作为 __enter__,yield 后的代码作为 __exit__。
结合一些重点内容,做了一个小的书籍管理系统,整理了重点的知识在里面的。
await 的作用是:
- 等待一个异步操作完成
- 在等待期间,允许其他任务执行
- 当被等待的操作完成后,继续执行后续代码
不使用 async/await 的情况
用户A: 保存书籍 ----等待文件写入完成---- 继续其他操作
用户B: --------等待用户A完成-------- 保存书籍 ----等待文件写入完成---- 继续其他操作
使用 async/await 的情况
用户A: 开始保存书籍 --等待文件写入---> 继续其他操作
用户B: 开始保存书籍 --等待文件写入---> 继续其他操作
decorator在里面起到一个打印日志,切面的作用aop。知道是调用了哪一个函数。有助于问题排查
这种机制不是真正的"同时执行",而是在等待 I/O 时切换到其他任务
注意比如这种 利用 contextmangaer注解来完成上下文的管理,yield相当于完成了init和enter的模块