Python—函数和它之间共享变量';装饰工
(Python2.7)由于装饰器不能与他们正在装饰的函数共享变量,我如何制作/传递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
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']