slowDuration
- локальная переменная функции slowAction
. Точка локальных переменных состоит в том, что они доступны только внутри функции.
Вы должны изменить функцию slowAction
, поэтому она использует переменную slowDuration
, которая определена где-то в другом месте, например, в качестве переменной-члена класса, которой, по-видимому, принадлежит make_slow
.
Вы также можете сделать slowAction
экземпляром класса, который переопределяет метод __call__
.
>>> class Counter:
... def __init__(self):
... self.count = 0
... def __call__(self, delta):
... self.count += delta
... print(self.count)
... def set_count(self, c):
... self.count = c
...
>>> c = Counter()
>>> c(1)
1
>>> c(3)
4
>>> c(3)
7
>>> c(3)
10
>>> c.set_count(42)
>>> c(-2)
40
Вы можете также использовать некоторые хитрости, чтобы сделать общей переменной доступны на самой функции объекта:
def makeCounter():
counter = None
def counter_func():
counter.count += 1
print(counter.count)
counter = counter_func
counter.count = 0
return counter
и использовать его как это:
>>> c = makeCounter()
>>> c()
1
>>> c()
2
>>> c()
3
>>> c()
4
>>> c.count = 42
>>> c()
43
>>> c()
44
>>> c()
45
Но в целом " умного "кода следует избегать, если у вас нет веских оснований для его использования, потому что это затрудняет понимание базы кода.
Из-за пределов 'slowAction' или' make_slow'? – cdonts
Да, извините, если я не понял. Я хочу отрегулировать значение в функции, полностью отделенной от этой, где я вызываю эту функцию. – swagbag
Боюсь, это невозможно. Почему вы не можете использовать параметр? – cdonts