IT袋

当前位置:主页 > 经验教程 > 建站编程 >

什么是闭包函数与装饰器

什么是闭包函数与装饰器 它们有哪些作用?(2)

时间:2023-09-23 19:59:19 来源:IT袋 作者:苏晓敏
导读:什么是闭包函数与装饰器,带返回值 # -*- coding: utf-8 -*-def loop(func): def wrapper(*args, **kw): ret = func(*args, **kw) return ret return wrapper@loopdef one(a, b): return a + bres = one(1, 2)print(res)# 当使用@loop对

什么是闭包函数与装饰器

带返回值

# -*- coding: utf-8 -*-
def loop(func):
    def wrapper(*args, **kw):
        ret = func(*args, **kw)
        return ret
    return wrapper
@loop
def one(a, b):
    return a + b
res = one(1, 2)
print(res)
# 当使用@loop对one()函数装饰以后,one指向了wrapper()函数,而wrapper()函数的返回值是ret,所以one()函数的返回值被ret接收了
#输出
3

实际案例

日志装饰器

# -*- coding: utf-8 -*-
import logging
import os
'''
* %(asctime)s   即日志记录时间,精确到毫秒@breif: 
* %(levelname)s 即此条日志级别@param[in]: 
* %(filename)s  即触发日志记录的python文件名@retval: 
* %(funcName)s  即触发日志记录的函数名
* %(lineno)s    即触发日志记录代码的行号
* %(message)s   即这项调用中的参数
'''
if not os.path.exists('Log.log'):
    file = open('Log.log', 'w')
logging.basicConfig(
    filename='Log.log',
    format="%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s"
)
'''
* @breif: 日志修饰器,为函数添加日志记录服务
* @param[in]: err -> 发生异常时返回的错误信息
* @retval: 加载日志服务的功能函数
'''
def logger(err):
    def log(func):
        def warp(*args, **kwargs):
            try:
                result = func(*args, **kwargs)
                return result
            except Exception as e:
                logging.error(e)
                return err
        return warp
    return log
@logger('出错了')
def add(a, b):
    return a + b
print(add(1, 2))
#控制台输出
出错了
# Log.log日志显示
2022-12-13 14:11:22,772 - ERROR - 闭包函数.py - warp - 36 - unsupported operand type(s) for +: 'int' and 'str'

自动化测试脚本中处理异常

举个例子,你正在跑一个自动化测试脚本,突然间设备的闹钟响了,而刚好闹钟的界面遮挡住了你要操作的那个按钮,最终导致脚本运行失败了。没办法,你只能关掉闹钟再重新运行一次脚本。

# -*- coding: utf-8 -*-
def test_retry(func):
    def run_case_again(*args, **kwargs):
        try:
            func(*args, **kwargs)
        except:
            # 如闹铃、断网重试按钮弹出、短信通知等导致失败
            if exists(xxxx):
                touch(xxx)
            try:
                func(*args, **kwargs)
                print('用例重新执行成功')
            except:
                print('用例执行失败')
                # 其他你想做的操作,比如停止剩余用例的执行
    return run_case_again
@test_retry
def test():
    wait(xxxx, timeout=15)

以上就是什么是闭包函数与装饰器 跟 它们有哪些作用的经验小知识,希望看完本文能给您带来一点帮助!

相关阅读

  • 建一个网站需要什么技术 有关建立自己的网站平台

    建一个网站需要什么技术 有关建立自己的网站平台

    跟大家分享建一个网站需要什么技术和有关建立自己的网站平台的方法内容,很不错的方法小知识,建议收藏哦! 随着互联网高速发展,网站的功能无可取代,网站已经成了每个企业的标配,

  • 深入理解Unicode:实现全球字符编码统一的关键

    深入理解Unicode:实现全球字符编码统一的关键

    小编为你介绍深入理解Unicode方面的讲解,一定能解决您的问题的,一起来了解吧! 在计算机世界中,Unicode扮演着至关重要的角色,它是一种用于表示几乎所有语言的字符的标准。 在本文中,

  • DNS为什么很难学习? 为什么学习DNS如此困难?

    DNS为什么很难学习? 为什么学习DNS如此困难?

    为大家介绍的是DNS为什么很难学习的相关知识,一定能解决您的问题的,一起来了解吧! 我经常写关于我发现难以学习的技术的文章。不久前,我的朋友 Sumana 向我提出了一个有趣的问题 为什

  • csgo等级在哪里看 公认最好的csgo开箱网站

    csgo等级在哪里看 公认最好的csgo开箱网站

    今天小编介绍csgo等级在哪里看和公认最好的csgo开箱网站的相关知识,接下来分享详细内容。 在CSGO中免费获得优先状态需要将等级达到21级中尉军衔后即可,点击左侧的物品栏,然后在背包里