Python—函数和它之间共享变量';装饰工

Python—函数和它之间共享变量';装饰工,python,python-2.7,decorator,python-decorators,Python,Python 2.7,Decorator,Python Decorators,(Python2.7)由于装饰器不能与他们正在装饰的函数共享变量,我如何制作/传递object\u list到装饰函数?我有一些函数将使用raw\u turn\u over\u mailer()decorator,如果可能的话,我希望将object\u list保留在本地修饰函数中 def raw_turn_over_mailer(function): @wraps(function) def wrapper(requests): original_functio

(Python2.7)由于装饰器不能与他们正在装饰的函数共享变量,我如何制作/传递
object\u list
到装饰函数?我有一些函数将使用
raw\u turn\u over\u mailer()
decorator,如果可能的话,我希望将
object\u list
保留在本地修饰函数中

def raw_turn_over_mailer(function):
    @wraps(function)
    def wrapper(requests):
        original_function = function(requests)
        if object_list:
            ....
        return original_function
     return wrapper


@raw_turn_over_mailer
def one(requests):
    object_list = [x for x in requests
            if x.account_type.name == 'AccountType1']
@raw_turn_over_mailer
def two(requests):
    object_list = [x for x in requests
            if x.account_type.name == 'AccountType2']

@periodic_task(run_every=crontab(hour="*", minute="*", day_of_week="*"))
def turn_over_mailer():
    HOURS = 1000
    requests = Request.objects.filter(completed=False, date_due__gte=hours_ahead(0), date_due__lte=hours_ahead(HOURS))
    if requests:
        one(requests)
        two(requests)

我实际上无法运行它,但我认为它会按照您所说的做,它会创建一个
wrapper()
函数,调用原始函数(现在只返回一个对象列表),然后对其进行后期处理(但本身不返回任何内容):

这似乎是一种复杂的方法来处理调用函数的结果。您只需调用后处理函数并将要调用的函数传递给它即可获得对象列表。

请提供SSCCE()代码。
from functools import wraps

def raw_turn_over_mailer(function):
    @wraps(function)
    def wrapper(requests):
        object_list = function(requests)  # call original
        if object_list:
            #....
    return wrapper

@raw_turn_over_mailer
def one(requests):
    return [x for x in requests if x.account_type.name == 'AccountType1']

@raw_turn_over_mailer
def two(requests):
    return [x for x in requests if x.account_type.name == 'AccountType2']