python进阶(一)

目录

1、“as”关键字在with语句中的作用

2、requirements.txt文件

-------------------------------------------------------------------


一、“as”关键字在with语句中的作用

as f 是 Python 上下文管理器(Context Manager) 语法的关键部分,用来为打开的文件对象创建一个别名。它不仅仅是“打开文件”,更重要的是确保文件被正确关闭as fopen() 函数返回的文件对象(一个复杂的、包含读写方法的资源句柄)绑定到变量 f 上,以便你在 with 代码块中使用它。

下面有一个示例:

with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 一旦离开这个缩进块,文件会**自动关闭**

它的执行过程等价于下面这段代码,但更安全、更简洁:

python

# 1. 尝试打开文件,获取文件对象
f = open('example.txt', 'r', encoding='utf-8')
try:
# 2. 执行你的文件操作
content = f.read()
finally:
# 3. 无论try块里是否发生异常,都确保关闭文件
f.close()

with...as... 语句自动帮你完成了 try...finally... 的“模板代码”,重点就是确保资源(这里是文件)被释放

二、requirements.txt文件

类似js中的package.json详细记录了当前环境的第三方包和版本信息

一键导出requirements.txt

pip freeze > requirements.txt

执行后,项目根目录会自动生成requirements.txt文件,里面完整记录了当前虚拟环境中安装的所有第三方库及精确版本,无冗余

他人如何使用requirements.txt搭建环境

他人拿到你的项目后,同样先创建并激活虚拟环境,然后执行以下命令,一键安装所有依赖:

pip install -r requirements.txt

pip会自动读取requirements.txt中的内容,安装对应版本的第三方库,快速还原你的项目运行环境,和 JS 中npm install读取package.json安装依赖的逻辑一致。

三、try Exception

python中错误捕获与其他稍有不同,其他语言try catch,而py中是try Exception

try:
# 可能会抛出异常的代码
result = 10 / 0
except ZeroDivisionError as e:
# 处理特定异常
print(f"发生除零错误: {e}")
except Exception as e:
# 处理其他所有异常
print(f"发生其他错误: {e}")
else:
# 没有异常时执行
print("没有发生异常")
finally:
# 无论是否发生异常都会执行
print("清理操作")

四、字符串模板

注意在下面的例子中template中有question,在Python中,字符串模板(如"问题: {question}")在定义时不会检查占位符是否在作用域中存在,因为它们只是普通字符串。占位符的解析发生在运行时,通过模板引擎(如Python的.format()方法或f-string,或在本例中是LangChain的处理逻辑)。

def create_simple_qa_chain():
"""创建一个简单的问答链"""
template = """
你是一个有用的助手。请根据以下问题提供详细和有帮助的答案。
问题: {question}
回答:"""
prompt = PromptTemplate(
input_variables=["question"],
template=template
)
llm = ChatOpenAI(
openai_api_key=settings.openai_api_key,
model_name=settings.model_name
)
chain = LLMChain(
llm=llm,
prompt=prompt
)
return chain

五、函数调用时的顺序参数和关键字参数

def example(a, b, c):
print(a, b, c)

# ✅ 正确的混合调用:位置参数在前,关键字参数在后
example(1, c=3, b=2) # 输出:1 2 3

# ❌ 错误的调用:位置参数出现在关键字参数之后
example(a=1, 2, 3) # 这会引发 SyntaxError