美文网首页Python基础
Python:扩充函数参数

Python:扩充函数参数

作者: 子休_ | 来源:发表于2018-02-14 20:36 被阅读10次

在使用装饰器的过程中,我们有时候会遇到这样的一个问题:
我有一个装饰器 & 我有一个函数。装饰器的某一个参数需要在我使用函数的时候动态输入,又或者我不能改变这个函数的情况下需要增加参数表来额外增加一些功能。
例如在Django定时任务这篇文章的最后我提到repeat关键字参数来控制函数的运行周期,这种时候我们该如何实现呢?

Solution


以上面文章提到的@background()装饰器为例(逻辑部分略过,只解析参数)。
可以这样实现

from functools import wraps

def background(*, schedule):
    def dont_care_name(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            try:
                repeat = kwargs.pop("repeat")
                # do something with repeat
            except KeyError:
                pass
            return func(*args, **kwargs)
        return wrapper
    # do something with schedule
    return dont_care_name

其他都是细枝末节,重要的是,我们在获取函数参数的那一层函数里尝试截取repeat这个关键字参数。使得无论这个参数存在与否都不会影响到func()的执行。

  • 这一功能好处在于,如果我有一个通用装饰器。那么只需要一点小小的修改,就既兼容了以前的代码,又增加了新的功能。并且函数使用起来就像从未发生改变过一样。坏处是:如果你的代码对速度要求苛刻到一点点的扣时间优化,那么这种写法会让你的运行速度多上几毫秒。(但既然要求速度,何不用Go呢,笑)

相关文章

  • Python:扩充函数参数

    在使用装饰器的过程中,我们有时候会遇到这样的一个问题:我有一个装饰器 & 我有一个函数。装饰器的某一个参数需要在我...

  • 函数的call、apply和bind方法

    call、apply作用相同只是传递参数的方式不同。 更改this指向,从而扩充了函数作用域 调用函数 传递参数 ...

  • python基础-07-函数

    python基础-函数 1.函数的定义 例子: 2.python中函数的参数详解 必备参数demo: 默认参数de...

  • python:函数说明

    Python: 函数参数魔法 2016-12-01 函数参数 在 Python 中,定义函数和调用函数都很简单,但...

  • Python的参数

    Python的参数函数的参数

  • python 函数参数类型

    本文主要学习内容: python函数参数类型 python 的函数参数类型分为4种:1.位置参数:调用函数时根据函...

  • python---函数参数

    python---函数参数 在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参...

  • python函数

    python函数 什么是函数 函数语法 调用函数 函数参数形参与实参传参指定参数传参参数默认值可变参数参数解包参数...

  • Python - 2017/01/28-函数

    调用python内置函数 函数名(参数) 即可调用python内置函数 help(函数名) 返回python对于函...

  • Python高阶函数学习笔记

    python中的高阶函数是指能够接收函数作为参数的函数 python中map()函数map()是 Python 内...

网友评论

    本文标题:Python:扩充函数参数

    本文链接:https://www.haomeiwen.com/subject/duzetftx.html