北京有哪些网站建设公司制作网页时可以使用什么来实现动态效果
北京有哪些网站建设公司,制作网页时可以使用什么来实现动态效果,西安大网站建设公司排名,算命网站该怎样做函数在 Python 中#xff0c;函数#xff08;Function#xff09; 是组织代码、实现特定功能的基本单元。它是可重用的代码块#xff0c;可以接受输入参数并返回结果。1. 函数的定义与调用基本语法代码语言#xff1a;pythonAI代码解释def function_name(parameters): expected int result add_numbers(hello, 5)3. IDE 支持现代 IDE如 PyCharm、VS Code都能利用类型注解提供自动补全错误提示代码导航8. 最佳实践1. 何时使用类型注解✅建议使用公共 API复杂函数团队项目长期维护的代码❌可以省略简单的脚本Jupyter Notebook快速原型2. 保持一致性代码语言pythonAI代码解释# ✅ 好的做法 def calculate_area(length: float, width: float) - float: 计算矩形面积 return length * width # ❌ 不一致的做法 def calculate_area(length, width): # 参数无类型 return length * width # 返回值无类型3. 使用文档字符串配合代码语言pythonAI代码解释def process_data(data: List[Dict[str, Any]], filter_key: str, filter_value: Any) - List[Dict[str, Any]]: 处理数据列表根据键值过滤 Args: data: 数据列表每个元素是字典 filter_key: 要过滤的键 filter_value: 过滤值 Returns: 过滤后的数据列表 return [item for item in data if item.get(filter_key) filter_value]9. Python 3.10 的新特性联合操作符|代码语言pythonAI代码解释# 旧方式 def process_value(value: Union[int, str]) - str: ... # 新方式 (Python 3.10) def process_value(value: int | str) - str: ...带括号的联合类型代码语言pythonAI代码解释# Python 3.10 def func(values: list[int | str]) - None: ...装饰器装饰器Decorator是一种强大的设计模式它允许你在不修改原函数代码的情况下为函数添加新的功能或行为。装饰器本质上是一个接收函数作为参数并返回函数的高阶函数。1. 装饰器的基本概念装饰器遵循开放-封闭原则对扩展开放对修改封闭。代码语言pythonAI代码解释# 基本结构 def decorator(func): def wrapper(*args, **kwargs): # 调用前的操作 result func(*args, **kwargs) # 调用后的操作 return result return wrapper decorator def my_function(): print(原函数执行)等价于代码语言pythonAI代码解释my_function decorator(my_function)2. 简单装饰器示例1. 计时装饰器代码语言pythonAI代码解释import time from functools import wraps def timer(func): wraps(func) # 保留原函数的元数据 def wrapper(*args, **kwargs): start time.time() result func(*args, **kwargs) end time.time() print(f{func.__name__} 执行时间: {end - start:.4f}秒) return result return wrapper timer def slow_function(): time.sleep(1) return 完成 slow_function() # 会打印执行时间2. 日志装饰器代码语言pythonAI代码解释def logger(func): wraps(func) def wrapper(*args, **kwargs): print(f调用函数: {func.__name__}) print(f参数: args{args}, kwargs{kwargs}) result func(*args, **kwargs) print(f{func.__name__} 返回: {result}) return result return wrapper logger def add(a, b): return a b add(3, 4)3. 带参数的装饰器装饰器本身也可以接受参数代码语言pythonAI代码解释def repeat(times): 重复执行函数指定次数 def decorator(func): wraps(func) def wrapper(*args, **kwargs): for _ in range(times): result func(*args, **kwargs) return result return wrapper return decorator repeat(3) def say_hello(): print(Hello!) say_hello() # 打印三次 Hello!更复杂的参数装饰器代码语言pythonAI代码解释def retry(max_attempts3, delay1): 失败时重试 def decorator(func): wraps(func) def wrapper(*args, **kwargs): for attempt in range(max_attempts): try: return func(*args, **kwargs) except Exception as e: if attempt max_attempts - 1: raise e print(f第{attempt 1}次尝试失败: {e}, {delay}秒后重试) time.sleep(delay) return wrapper return decorator retry(max_attempts3, delay0.5) def unstable_api(): import random if random.random() 0.7: # 70% 概率失败 raise ConnectionError(网络错误) return 成功4. 类装饰器类也可以作为装饰器代码语言pythonAI代码解释class CountCalls: def __init__(self, func): self.func func self.count 0 wraps(func)(self) # 复制原函数的元数据 def __call__(self, *args, **kwargs): self.count 1 print(f{self.func.__name__} 被调用了 {self.count} 次) return self.func(*args, **kwargs) CountCalls def greet(name): print(fHello, {name}!) greet(Alice) # 被调用了 1 次 greet(Bob) # 被调用了 2 次5. 装饰器的堆叠可以将多个装饰器堆叠使用代码语言pythonAI代码解释timer logger repeat(2) def calculate_sum(n): return sum(range(n)) calculate_sum(1000)执行顺序从下到上先repeat再logger最后timer6. 保留函数元数据使用wraps非常重要否则会丢失原函数的信息代码语言pythonAI代码解释from functools import wraps def simple_decorator(func): wraps(func) # 保留 __name__, __doc__, __module__ 等 def wrapper(*args, **kwargs): wrapper 函数的文档 return func(*args, **kwargs) return wrapper simple_decorator def original_function(): 原函数的文档 pass print(original_function.__name__) # original_function (而不是 wrapper) print(original_function.__doc__) # 原函数的文档 (而不是 wrapper 的文档)7. 常见的装饰器应用场景1. 缓存/记忆化代码语言pythonAI代码解释from functools import lru_cache lru_cache(maxsize128) def fibonacci(n): if n 1: return n return fibonacci(n-1) fibonacci(n-2) # 内置的 lru_cache 是一个优秀的缓存装饰器2. 权限验证代码语言pythonAI代码解释def requires_permission(permission): def decorator(func): wraps(func) def wrapper(user, *args, **kwargs): if permission not in user.get(permissions, []): raise PermissionError(f需要 {permission} 权限) return func(user, *args, **kwargs) return wrapper return decorator requires_permission(admin) def delete_user(user, target_user): print(f删除用户: {target_user}) admin {name: admin, permissions: [admin, user]} delete_user(admin, test_user) # 成功3. 输入验证代码语言pythonAI代码解释def validate_types(**expected_types): def decorator(func): wraps(func) def wrapper(*args, **kwargs): # 获取函数签名 import inspect sig inspect.signature(func) bound_args sig.bind(*args, **kwargs) bound_args.apply_defaults() # 验证类型 for name, value in bound_args.arguments.items(): if name in expected_types: if not isinstance(value, expected_types[name]): raise TypeError(f{name} 必须是 {expected_types[name]} 类型) return func(*args, **kwargs) return wrapper return decorator validate_types(ageint, namestr) def create_user(name, age): return f用户 {name}, {age}岁 create_user(Alice, 25) # 正常 # create_user(Bob, 25) # 抛出 TypeError4. 属性装饰器代码语言pythonAI代码解释class Circle: def __init__(self, radius): self._radius radius property def radius(self): return self._radius radius.setter def radius(self, value): if value 0: raise ValueError(半径不能为负数) self._radius value property def area(self): return 3.14159 * self._radius ** 2 c Circle(5) print(c.area) # 78.53975 c.radius 10 # 使用 setter8. 装饰器工厂创建可配置的装饰器代码语言pythonAI代码解释def create_validator(min_valueNone, max_valueNone, type_None): def validator(func): wraps(func) def wrapper(value): if type_ and not isinstance(value, type_): raise TypeError(f必须是 {type_} 类型) if min_value is not None and value min_value: raise ValueError(f值不能小于 {min_value}) if max_value is not None and value max_value: raise ValueError(f值不能大于 {max_value}) return func(value) return wrapper return validator create_validator(min_value0, max_value100, type_int) def set_grade(grade): print(f成绩设置为: {grade}) set_grade(85) # 正常 # set_grade(-5) # 抛出 ValueError9. 装饰器的注意事项1. 执行顺序代码语言pythonAI代码解释decorator1 decorator2 decorator3 def func(): pass # 等价于 func decorator1(decorator2(decorator3(func)))2. 装饰器的副作用可能影响性能增加调试复杂度可能隐藏错误3. 避免过度使用装饰器应该用于横切关注点日志、权限、缓存等通用功能不要用于业务逻辑总结本文主要对函数进行全方位的解析以及叙述关于文中提到的类泛型等新的概念需要学习后续文章有编程基础的可以快速掌握对于没有基础的可以将新的概念词保留以便后续的学习补充。