Есть ли способ использовать переменную из внешней функции во внутреннем теле функции, в Python? - PullRequest
0 голосов
/ 23 мая 2018

Шаблон кода, который я пытаюсь создать:

def OuterFunction():
    theVariable = 0

    def InnerFunction():
        # use theVariable from OuterFunction somehow

    # the solution is not to use InnerFunction(theVariable) due to the reasons given in the text
    InnerFunction()

Я надеялся, что есть какое-то ключевое слово (например, глобальное) или способ сказать интерпретатору использовать переменную из области видимости внешнего метода.

Зачем мне это нужно так: скрипт Python, который мы запускали раньше, теперь должен стать модулем (набор методов).

OuterFunction раньше не существовала, и InnerFunction является лишь примеромдля большого числа очень сложных методов, которые несут уже существующую логику.

theVariable является просто примером для нескольких глобальных переменных, которые использовались в скрипте во всех методах, которые представляет InnerFunction.

Я не хочу менять сигнатуры всех методов, которые, кстати, являются вложенными.

РЕДАКТИРОВАТЬ:

Вот код, который вылетает для меня в каждом интерпретаторе, с "локальной переменной«theVariable» ссылается перед присваиванием «ошибка (поэтому я не могу просто ссылаться на переменную):

def OuterFunction():

    theVariable = 5

    def InnerFunction():
        theVariable = theVariable + 1
        print(theVariable)

    InnerFunction()

OuterFunction()

EDIT2:

Кажется, попытка chaЭта переменная приводит к исключению, которое дает неверное описание.Если InnerFunction () изменяется, чтобы содержать только оператор print (theVariable), он работает.

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Вы можете просто ссылаться на переменную напрямую, как показано ниже:

def outer():
    x = 1
    def inner():
        print(x + 2)
    inner()
outer()

Печать: 3

0 голосов
/ 23 мая 2018

Вы можете просто ссылаться на 'theVariable' внутри вложенной InnerFunction, если вы не хотите передавать ее значение в качестве параметра:

def OuterFunction():
    # Declare the variable
    theVariable = 42

    def InnerFunction():
        # Just reference the 'theVariable', using it, manipulating it, etc...
        print(theVariable)

    # Call the InnerFunction inside the OuterFunction
    InnerFunction()

# Call the OuterFunction on Main
OuterFunction()

# It will print '42' as result
0 голосов
/ 23 мая 2018

С вами все будет в порядке:

def OuterFunction():
    theVariable = 0
    def InnerFunction(value):
        return value + 1
    theVariable = InnerFunction(theVariable)
    return theVariable

Таким образом, вам не нужно связываться с областями видимости, и ваши функции чисты .

...