Использование Python декораторов с данными из глобальной переменной - PullRequest
0 голосов
/ 27 апреля 2020

Итак, я написал немного кода, который работает, но я не доволен стилем, так что вы можете помочь мне с этим. Функция Wrapper перебирает глобальную переменную и использует некоторые из этих данных в качестве аргументов, поэтому, когда я вызываю функцию, она имеет другой набор аргументов, чем когда она определена. Вот пример кода:

from functools import wraps

global elems
elems = [('a','b')]

def onEachInList(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        results = [func(a, b, *args, **kwargs) for a, b in elems]
        return 'done'
   return wrapper

@onEachInList
def func_1(a, b, c):
    print(f'{a}{b}{c}')

@onEachInList
def func_2(a, b):
    print(f'{a}{b}')

Теперь, когда я использую функции, я просто вызываю

>>> func_1(c)
abc
'done'
>>> func_2()
ab
'done'

Это работает, но верно ли это? Если нет, то как мне написать это?

...