Как получить доступ к переменным в более глобальных функциях внутри вложенной функции?(Python) - PullRequest
0 голосов
/ 11 июля 2019

Я запускаю функцию внутри другой функции.Однако более вложенная функция не может получить доступ к переменным в основной, более глобальной функции.Когда я пытаюсь запустить свой код, я получаю сообщение об ошибке «x is notfined».Я бы подумал, что, поскольку x - это более глобальная переменная с большей областью действия, она должна быть доступна.

def func_master():
    x = 'hello world'
    test_sub()


def test_sub():
    print(x)

func_master()

Я хочу, чтобы она распечатала «hello world».

1 Ответ

3 голосов
/ 11 июля 2019

Ваши функции не являются «вложенными», что означает, что одна определена внутри другой. Вместо этого вы вызываете одну функцию из другой, но функции определены отдельно, ни внутри другой.

Правила области видимости Python основаны на определении функций . Поэтому, когда func_master вызывает test_sub, имя x, которое было определено в func_master, недоступно для test_sub.

Лучший (но не только) способ сделать x пригодным для использования в test_sub - это передать его в качестве параметра. Измените вызов в func_master, чтобы передать x, и измените определение test_sub, чтобы получить его. Хорошей практикой программирования является то, что одна подпрограмма передает всю необходимую информацию в качестве параметров - избегайте использования глобальных переменных и т. Д., Если они не являются абсолютно необходимыми.

def func_master():
    x = 'hello world'
    test_sub(x)


def test_sub(x):
    print(x)

func_master()
...