2016-12-09 4 views
1

Простой вопрос о области переменных: почему переменные, объявленные в основной функции, доступны из внешних функций? То есть Почему следующая печать «да»?Объем переменных, объявленных в основной функции?

def run(): 
    print var 

if __name__ == '__main__': 
    var = 'yes' 
    run() 

И есть ли способ «отключить это»? С точки зрения написания хорошего кода, это не помогает упускать пропущенные переменные в функции в качестве аргументов и все еще иметь ваш код.

+1

Это не «основная функция»; это просто оператор if. Вы можете определить функцию, называемую 'main' (или что-то еще), и только вызывать ее внутри' if', если хотите. – Ryan

+2

Заблуждение состоит в том, что в вашем коде нет основной функции. Единственная функция, которая есть, - это 'run()' и 'run', конечно, видеть все внешние переменные (хотя и не изменять их). – ImportanceOfBeingErnest

ответ

3

Операторы if не создают новую область действия в Python. Невозможно «отключить это»; это ключевая часть того, как работает язык.

Вы можете использовать основную функцию, чтобы обернуть его в новой области (обычно это то, что вы хотите делать, не загромождать пространство имен) и вызывать его из основного-охранник, как так:

def run(): 
    print var 

def main(): 
    var = 'yes' 
    run() 

if __name__ == '__main__': 
    main() 
Смежные вопросы