Python高级语法知识点
1. 类和继承
基本概念
- 类:类是创建对象的蓝图。它定义了一组属性和方法,这些属性和方法描述了对象的行为和状态。
- 继承:继承允许一个类(子类)继承另一个类(父类)的属性和方法。这有助于代码重用和组织。
示例
# 父类
class BaseLLM:
def __init__(self, model_name: str):
self.model_name = model_name
def generate(self, prompt: str) -> str:
raise NotImplementedError("This method should be implemented by subclasses")
# 子类
class BaseOpenAI(BaseLLM):
def __init__(self, model_name: str, api_key: str):
super().__init__(model_name)
self.api_key = api_key
def generate(self, prompt: str) -> str:
# 模拟调用API
return f"Generated text from {self.model_name} with prompt: {prompt}"
# 使用
openai_model = BaseOpenAI(model_name="gpt-3.5-turbo", api_key="your_api_key")
print(openai_model.generate("Hello, world!"))
2. 数据验证和配置管理
基本概念
- Pydantic:Pydantic 是一个用于数据验证和配置管理的库,可以确保传入的数据符合预期的结构和类型。
- Field:
Field用于定义类属性的默认值、别名和排除选项。 - root_validator:
root_validator是一个类方法装饰器,用于在对象实例化时对整个对象进行验证和处理。
示例
from pydantic import BaseModel, Field, root_validator
from typing import Optional
class BaseLLM(BaseModel):
model_name: str
api_key: Optional[str] = Field(None, alias="api_key")
@root_validator(pre=True)
def build_extra(cls, values: dict) -> dict:
if "api_key" not in values and "OPENAI_API_KEY" in os.environ:
values["api_key"] = os.environ["OPENAI_API_KEY"]
return values
# 使用
data = {"model_name": "gpt-3.5-turbo"}
llm = BaseLLM(**data)
print(llm.model_name, llm.api_key)
3. 异步编程
基本概念
- AsyncIO:AsyncIO 是 Python 标准库中的一个模块,用于编写并发代码,使用协程、任务和事件循环。
- async 和 await:
async关键字用于定义协程函数,await关键字用于等待协程函数的结果。 - AsyncIterator:异步迭代器允许在异步上下文中逐块处理数据。
示例
import asyncio
async def fetch_data(url: str) -> str:
# 模拟异步网络请求
await asyncio.sleep(1)
return f"Data from {url}"
async def main():
urls = ["http://example.com", "http://example.org"]
tasks = [fetch_data(url) for url in urls]
results = await asyncio.gather(*tasks)
for result in results:
print(result)
# 运行
asyncio.run(main())
4. 类型注解
基本概念
- Type Annotations:类型注解用于指定函数参数和返回值的类型,有助于提高代码的可读性和维护性。
- Union 和 Literal:
Union用于定义多个可能的类型,Literal用于定义具体的字面量值。
示例
from typing import List, Optional, Union, Literal
def process_data(data: Union[int, float], action: Literal["add", "subtract"]) -> float:
if action == "add":
return data + 10.0
elif action == "subtract":
return data - 10.0
else:
raise ValueError("Invalid action")
# 使用
print(process_data(5, "add")) # 输出: 15.0
print(process_data(15.0, "subtract")) # 输出: 5.0
5. 装饰器
基本概念
- @property:
@property装饰器用于定义只读属性或计算属性。 - @root_validator:
@root_validator是 Pydantic 提供的一个装饰器,用于在对象实例化时对整个对象进行验证和处理。
示例
class Circle:
def __init__(self, radius: float):
self._radius = radius
@property
def radius(self) -> float:
return self._radius
@property
def area(self) -> float:
return 3.14159 * self._radius ** 2
# 使用
circle = Circle(5)
print(circle.radius) # 输出: 5
print(circle.area) # 输出: 78.53975
6. 日志记录
基本概念
- logging:
logging模块用于记录调试信息和错误信息,帮助调试和监控应用程序。
示例
import logging
# 配置日志记录
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
# 记录日志
logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical message")
7. 环境变量和配置管理
基本概念
- os.getenv:
os.getenv用于从环境变量中获取配置值。 - get_from_dict_or_env:自定义函数,用于从字典或环境变量中获取配置值。
示例
import os
def get_from_dict_or_env(config: dict, key: str, env_var: str) -> str:
value = config.get(key) or os.getenv(env_var)
if not value:
raise ValueError(f"Missing required configuration: {key}")
return value
# 使用
config = {"api_key": "your_api_key"}
api_key = get_from_dict_or_env(config, "api_key", "OPENAI_API_KEY")
print(api_key)
8. 错误处理
基本概念
- try-except:
try-except语句用于捕获和处理异常,确保程序在出现错误时能够继续运行。
示例
def divide(a: float, b: float) -> float:
try:
result = a / b
except ZeroDivisionError:
logging.error("Division by zero is not allowed")
return None
return result
# 使用
print(divide(10, 2)) # 输出: 5.0
print(divide(10, 0)) # 输出: None 并记录错误日志
1034

被折叠的 条评论
为什么被折叠?



