У меня есть проблемы с использованием генераторов функций в Python, то есть возврата функций из функции, где некоторые из входов определяются с помощью аргументов внешней функции, давая функцию с более низким артиком. Я использовал этот метод ранее в других случаях без проблем, но в этом случае я столкнулся с ошибкой и не смог понять причину. У меня есть следующая функция, которая создает функцию: < /p>
Код: Выделить всё
def func1(s: set, f: Callable) -> Callable:
def func2(x: int) -> dict:
while x:
s = s - {x}
x = f(x)
return s
return func2
f2 = func1({1,2,3,4}, lambda x: x-1)
Если я попробую f2 (3) , я получаю ошибку "локальная переменная 's' ссылается перед назначением" , связанной с оператором s = s - {x} . Я не понимаю, почему s не является частью области области, поскольку я предполагал, что он был фиксирован, когда func1 был вызван для создания F2 .
Я смог решить эту проблему, вместо этого используя этот метод: я объединяю все аргументы в одну функцию, скажем, Func3 и используйте функции.
Код: Выделить всё
from functools import partial
def func3(x: int, s: set, f: Callable) -> dict:
while x:
s = s - {x}
x = f(x)
return s
f2 = partial(func3, s={1,2,3,4}, f=lambda x: x-1)
Когда я вызову f2 (3) я получаю {4} , как и ожидалось. Тем не менее, я, по -видимому, что -то упускаю в том, как работает переменная область в первом случае. Любое понимание будет высоко оценено.
Подробнее здесь:
https://stackoverflow.com/questions/708 ... m-function