2013-11-15 2 views
2

Получил один скрипт цикла, который запускается сам по себе, теперь я хочу добавить еще один скрипт внутри первого, я вставил var в начале первого файла, если он прав, а затем загрузит второй модуль. Это работает, но мне интересно, хороша ли его практика?Импорт модулей передовой практики Python

if abilitaPippo == True: 
    try: 
     import Pippo 
     Pippoabilitato = True 
    except ImportError: 
     Pippoabilitato = False 
else: 
    Pippoabilitato = False 
+0

нет. ужасно. использовать функции. – shx2

+0

Просьба уточнить, что вы подразумеваете под «добавить еще один сценарий в первый» –

+0

возможно помощь: http://stackoverflow.com/questions/5027352/how-to-test-if-one-python-module-has -been-imported – Farhadix

ответ

1

модули Python, которые «делать вещи» в глобальном масштабе становятся хрупкими, потому что они работают по-разному, когда запускать непосредственно, когда они импортируются. Также в процессе Python модуль будет только «выполнен» один раз - при первом импорте. После этого import обнаруживает, что он уже загружен и ничего не нужно делать.

Посмотрите на это: http://plope.com/Members/chrism/import_time_side_effects

Это избегание побочных эффектов также является причиной для типичного Python идиомы

if __name__ == '__main__': 
    main() 

, который вы будете часто видеть в сценариях запуска из командной строки , При запуске из командной строки глобальная переменная __name__ представляет собой строку «main», но когда модуль импортируется, __name__ - это имя модуля, поэтому ничего не запускается напрямую.

1

Python не C с #ifdef и так далее, и, таким образом, вы должны избегать условного включения кода. Или иначе: вы можете это сделать, но это не рекомендуется в Python.

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

Это уже было сказано в Python распространено иметь следующие для модулей, которые могут или не могут быть установлены:

try: 
    import mymodule 
except ImportError: 
    pass 
Смежные вопросы