当前位置: 首页 > wzjs >正文

做名片哪个网站最好搜索引擎优化seo专员

做名片哪个网站最好,搜索引擎优化seo专员,免费网站模版建设,端网站建设目录 一、装饰器的基本概念 示例:用装饰器优化质数查找函数 二、装饰器的高级用法 1. 支持任意参数的装饰器 2. 装饰器的返回值处理 在 Python 编程中,装饰器是一个非常强大的功能,它可以让其他函数或方法在不需要做任何代码修改的前提下…

目录

一、装饰器的基本概念

示例:用装饰器优化质数查找函数

二、装饰器的高级用法

1. 支持任意参数的装饰器

2. 装饰器的返回值处理


在 Python 编程中,装饰器是一个非常强大的功能,它可以让其他函数或方法在不需要做任何代码修改的前提下增加额外功能。装饰器本质上是一个 Python 函数,它遵循“不要重复自己”(DRY)的原则,通过封装可复用的功能,使代码更加简洁、可读性更高。

一、装饰器的基本概念

装饰器本质上是一个高阶函数,它接收一个函数作为参数,并返回一个新函数来替代原函数。这个新函数需要保留原函数的调用方式(参数和返回值),同时在原函数执行前后添加额外逻辑(如计时、日志等)。

示例:用装饰器优化质数查找函数

假设我们需要计算 2 到 9999 的所有质数,并打印找到这些数所需的时间。普通的实现方式如下:

import timedef is_prime(num):if num < 2:return Falseelif num == 2:return Trueelse:for i in range(2, num):if num % i == 0:return Falsereturn Truedef prime_nums():t1 = time.time()for i in range(2, 10000):if is_prime(i):print(i)t2 = time.time()print(f"执行时间:{t2 - t1}秒")prime_nums()

在这个例子中,time 模块的代码与质数查找的逻辑混杂在一起,使得代码可读性较差。如果我们将计时功能通过装饰器实现,代码会更加清晰:

import time# 定义一个装饰器
def display_time(func):def wrapper():start_time = time.time()func()  # 调用原函数end_time = time.time()print(f"执行时间: {end_time - start_time} 秒")return wrapper# 使用装饰器
@display_time
def prime_nums():for i in range(2, 10000):if is_prime(i):print(i)prime_nums()

装饰器的底层逻辑是将原函数传递给装饰器函数,然后用装饰器返回的新函数覆盖原函数。例如,@display_time 等价于以下代码:

prime_nums = display_time(prime_nums)

二、装饰器的高级用法

1. 支持任意参数的装饰器

在实际开发中,被装饰的函数可能需要接收参数。因此,装饰器需要支持任意数量的位置参数和关键字参数。通过使用 *args**kwargs,可以实现这一点:

import timedef display_time(func):"""支持任意参数的时间统计装饰器"""def wrapper(*args, **kwargs):t1 = time.time()result = func(*args, **kwargs)  # 将参数传递给原函数t2 = time.time()print(f"函数执行时间: {t2 - t1} 秒")return result  # 返回原函数的返回值return wrapper@display_time
def add(a, b):return a + badd(3, 5)  # 输出:函数执行时间: 0.0 秒,返回值:8

2. 装饰器的返回值处理

如果被装饰的函数有返回值,装饰器需要正确处理并返回。例如:

def logger(func):def wrapper(*args, **kwargs):print(f"开始执行函数 {func.__name__},参数: {args}, {kwargs}")result = func(*args, **kwargs)print(f"函数 {func.__name__} 执行完毕,返回值: {result}")return resultreturn wrapper@logger
def multiply(a, b):return a * bmultiply(2, 3)  # 输出:开始执行函数 multiply,参数: (2, 3), {},返回值:6
multiply(a=2, b=3)  # 输出:开始执行函数 multiply,参数: (), {'a': 2, 'b': 3},返回值:6
multiply(2, b=3)  # 输出:开始执行函数 multiply,参数: (2,), {'b': 3},返回值:6

需要注意的是,关键字参数必须跟在所有位置参数之后,否则会报错。

@浙大疏锦行

http://www.dtcms.com/wzjs/43494.html

相关文章:

  • 国外做鞋子的网站吗seo点击排名源码
  • 象山县住房和城乡建设局网站草根seo博客
  • asp商城网站源码下载站长seo综合查询
  • 手游代理联运平台成都关键词seo推广平台
  • 深圳免费网站优化网络推广网络优化工程师证书
  • 做图兼职网站有哪些长沙建站工作室
  • 江苏省建设工程招投标网站产品营销策划方案
  • 网站服务提供商网站排名优化外包
  • 如何在人力资源网站做合同续签搜索引擎优化seo网站
  • 做网站需要了解的内容今日桂林头条新闻
  • 网站里滚动的图片怎么做的百度推广营销方案
  • 无锡专业网站营销查收录
  • 新建的网站怎么登录域名注册要多少钱
  • 用wordpress怎么做网站百度指数怎么用
  • 网站代运营收费百度导航下载2022最新版官网
  • 昆明做网站魄罗科技百度人工智能
  • 提供域名申请的网站小程序模板
  • word可以做网站链接吗南宁网络优化seo费用
  • 武汉网站建设机构百度浏览器网址
  • 北京企业网站seo推广app赚钱的平台
  • 微信二维码seo标题优化
  • 岑溪网站开发北京网站快速排名优化
  • 深圳企业网站制作哪家好湖南关键词排名推广
  • 网站建设教程 项目式seo全称是什么
  • 网站被黑客攻击怎么办app开发公司排行榜
  • 有教做路桥质检资料的网站吗品牌宣传的推广
  • 东莞网站推广哪家好营销课程培训哪个机构好
  • 做图素材网站 千nba在线直播免费观看直播
  • 广州网站推广费用网络促销
  • 做网站文字编辑好不好东莞网站制作外包