У меня следующий декоратор работает нормально с параметром
from functools import wraps
def sumproduct(cnt):
def dec(f):
@wraps(f)
def wrap(*args):
print('inside wrapper')
_sum = 0
for i in range(cnt):
_sum = _sum + sum([i * a for a in args])
f(_sum)
return wrap
return dec
cnt = 3
@sumproduct(cnt)
def myfunc(num):
print(num)
if __name__ == "__main__":
myfunc(10)
Результат - 30
, что составляет 0*10 + 1*10+ 2*10
Однако я хотел бы импортировать этот модуль в другое место , например, в тестовый модуль. Я хотел бы сделать что-то вроде следующего, чтобы cnt
не определялся в глобальной области:
from functools import wraps
def sumproduct(cnt):
def dec(f):
@wraps(f)
def wrap(*args):
print('inside wrapper')
_sum = 0
for i in range(cnt):
_sum = _sum + sum([i * a for a in args])
f(_sum)
return wrap
return dec
@sumproduct(cnt)
def myfunc(num):
print(num)
if __name__ == "__main__":
cnt = 3
myfunc(10)
Как я могу определить cnt
, чтобы
cnt
всегда 3 при выполнении кода? - и
cnt
не импортируются при импорте модуля?
Примечание: Это просто примерное представление кода. Предположим, что cnt
- это соединение с базой данных, которое подключается к производственной базе данных. Я хотел бы использовать другое соединение с базой данных для тестов, поэтому я не хочу импортировать соединение с производственной базой данных в тестовый модуль.