跳至主要內容
pptg

pptg

费大厨辣椒炒肉真是太好吃了!

ppNginx
nginx命令行工具 by Golang
youi
个人todo软件 by Flutter
ppMenu
个人Mac的便捷菜单栏 by Swift
ppBlog
个人主页
lookAtMe
悬浮提醒桌面小助手
pp宇宙
无聊画画
python异步编程

1. 关键字 async、await

python中,asyncawait两个关键字用于定义异步操作。

  • async: 定义异步函数,表明该函数是协程,可以在其中使用await来等待其他异步操作完成。异步函数的执行不会阻塞事件循环,而是会立即返回一个协程对昂。
  • await: 用于在异步函数内等待其他协程执行完成/。遇到await时,事件循环会挂起当前的协程,并执行其它任务,直到协程完成后再恢复。

pptg大约 7 分钟
python 字典原理

1. Python字典

Python字典(dict)是一种可变容器模型,用于存储键值对(key-value)映射关系。它是Python中最重要、最常用的数据结构之一。

主要特性:

  • 无序性(Python 3.7+开始保持插入顺序)
  • 键必须是可哈希的不可变类型
  • 值可以是任意Python对象
  • 动态扩容,自动调整大小
  • 提供快速的查找、插入和删除操作

2. 实现原理

  • 计算哈希值:对键调用hash()函数得到哈希值
  • 计算索引:index = hash(key) & (mask),其中mask = table_size - 1
  • 处理冲突:使用开放定址法中的伪随机探测
  • 插入/查找:在计算的位置开始探测,直到找到空槽或匹配的键

pptg大约 3 分钟
如何写好提示词

1. Prompt 到底用 # 还是 <></>

目前的开源项目,存在两种主流的prompt标记符号。下面以两个自动优化提示词的项目为例子:

  • \#: prompt_optimizer
  • <>: coze_loop

个人感觉还是<>效果更好一点,可以明确的划定一个指令块的区间,只是可读性不太友好

2. 为什么LLM的对话模型分为system、user、assistant?


pptg大约 7 分钟
python GC

1. 垃圾回收机制

python的垃圾回收机制主要分为三大块:

  • 引用计数法: 最基本的回收方法
  • 标记清除法: 用于回收循环引用的部分
  • 分代回收法: 用于解决频繁扫描“标记清除列表”的性能问题

1.1 引用计数法

python通过引用计数器来进行垃圾回收。每个对象的基础结构里都维护了引用计数字段,如果他的引用数量是0,则会触发回收机制。

// 这是Python对象在C层面的基础结构
typedef struct _object {
    Py_ssize_t ob_refcnt;  // 引用计数
    PyTypeObject *ob_type; // 类型指针
    // ... 其他字段根据类型不同而变化
} PyObject;

pptg大约 4 分钟
python元类

1. 什么是元类

在python中,一切皆对象,包括类本身。元类是创建类对象的类。就像类是用来创建实例的模板一样,元类是创建类的模板。

class MyClass:
    pass

obj = MyClass()

print(f"实例的类型: {type(obj)}")        # <class '__main__.MyClass'>
print(f"类的类型: {type(MyClass)}")      # <class 'type'>
print(f"type的类型: {type(type)}")       # <class 'type'>

# 所以:
# 实例 obj 是 MyClass 类的对象
# 类 MyClass 是 type 类的对象
# 元类 type 是 type 类的对象(type是自身的实例)

pptg大约 4 分钟
python上下文管理器和with

1. 什么是上下文管理器

上下文管理器(Context Manager)是Python中用于管理资源(如文件、数据库连接、锁等)的对象,它定义了在进入和退出代码块时要执行的操作。上下文管理器通过实现 __enter__()__exit__() 方法来工作

2. with的作用

with语句提供了一种优雅的方式来管理资源,确保资源被正确初始化和清理,即使在发生异常的情况下也是如此。它的主要优势包括:

  • 自动资源管理:自动获取和释放资源
  • 异常安全:即使在with块内发生异常,清理代码也会被执行
  • 代码简洁:避免了冗长的try...finally
  • 可读性强:清晰地标出了资源的作用范围

pptg大约 3 分钟
python泛型

1. 什么是泛型

泛型编程允许我们编写与特定类型无关的代码,提高代码的复用性和类型安全性。在Python中,这主要通过TypeVar来实现,它可以创建类型变量,在函数、类或方法中作为占位符类型使用

TypewVar的作用

  • 创建类型变量:定义可以在多个位置使用的通用类型
  • 保持类型一致性:确保相关参数或返回值具有相同的类型
  • 支持复杂类型约束:可以限制类型变量的可能取值

2. 常见问题

  1. TypeVar和Union有什么区别

pptg大约 2 分钟
迭代器、生成器

1. 迭代器

迭代器实现了迭代器协议,是一个可以记住遍历位置的对象,必须提供两个方法:

  • __iter__(): 返回迭代器对象本身
  • __next__(): 返回下一个值,如果没有了就排除StopIteration异常

2. 生成器

生成器是一种使用yield关键字,更简单创建迭代器的方式

3. 两者区别

特性 迭代器 生成器
创建方式 实现__iter__和__next__ 使用yield或生成器表达式
代码复杂度 相对复杂 简单
内存使用 取决于实现 极低,懒加载,只会在需要的时候生成值,然后暂停直到下次请求
状态保持 手动维护 自动保持
适用场景 复杂迭代 简单迭代

pptg大约 2 分钟
闭包、装饰器

1. 闭包

闭包是函数式编程的重要概念,也是理解装饰器的基础。

闭包 = 内部函数 + 外部变量, 是一个能"记住"它被创建时的环境的函数,即使那个环境已经不再存在

闭包三要素:

  • 嵌套函数:函数内部定义另一个函数
  • 引用外部变量:内部函数引用外部函数的变量
  • 返回内部函数:外部函数返回内部函数

pptg大约 4 分钟
python语言

1. python和java、golang的对比

python Java Golang
类型 动态强类型 静态强类型 静态强类型
编译/解释 解释型 编译为字节码 编译为机器码
性能 较慢 较快 很快
并发模型 多线程(GIL限制) 多线程 轻量级协程(goroutine)

pptg大约 2 分钟