2014-09-11 2 views
0

Я новичок в python и выполняю задание. Это должно быть сделано с linux, но поскольку я делаю это самостоятельно на своем собственном компьютере, я делаю это на окнах.При импорте функции он запускает весь скрипт?

Я пытался сделать это тест-системы, которые мы используем, глядя, как это:

>>> import file 
>>> file.function(x) 
"Answer that we want" 

Затем мы запускаем его через Linux терминал. Я пытаюсь создать свой собственный способ сделать это, создав тестовый файл, который импортирует файл и запускает функцию. Но тогда, с другой стороны, просто запуская функцию, он запускает весь скрипт. Хотя это никогда не вызывали, чтобы сделать это.

Import file 
file.function(x) 

Это в значительной степени то, что я делал, но он управляет целым «файлом». Я также пробовал функцию From File Import; Он делает то же самое.

Какой сценарий можно использовать для сценария «ответ, который я хочу» для тестового файла? Когда мы запускаем терминал через linux, он говорит, что он провалился или забил.

+2

Нам нужно знать содержимое 'file.py', можете ли вы его опубликовать? – heltonbiker

+3

Это то, что означает 'import module' - запустить код в данном файле и сохранить, а также переменные и функции, созданные в модуле с этим именем. Используйте 'if __name__ ==" __main __ ":' и размещайте любой код, который вы не хотите запускать, когда модуль импортируется в тело оператора if. – Dunes

ответ

5

import Файл, эквивалентный его запуску.

Когда вы создаете файл (модуль), создается новый объект модуля, и после выполнения модуля каждый новый идентификатор помещается в объект как атрибут.

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

Если вы хотите, чтобы запустить что-то только тогда, когда вызывается непосредственно, вы можете сделать

A = whatever 

def b(): 
    ... 

if __name__ == '__main__' 
    # write code to be executed only on diret execution, but not on import 

Это справедливо независимо от того, если вы import module или from module import function, так как они делают то же самое. Только окончательное назначение отличается:

import module делает:

  • Проверить sys.modules, и если имя модуля не содержится там, импортировать его.
  • Назначить идентификатор module объекту модуля.

from module import function делает

  • Проверьте sys.modules, и если имя модуля не содержится там, импортировать его. (Тот же шаг, что и выше).
  • Присвойте идентификатор function атрибуту объекта модуля function.
+0

Хорошо, так, как указано. Тихий новичок в python, поэтому некоторые части по-прежнему являются иностранным языком, когда я его читаю. Поэтому, если я правильно это понимаю, если я импортирую модуль (файл), он будет запущен, но как получилось, когда я сделал это в linux и импортировал файл, а затем запустил функцию файлов, чтобы он не прошел через всю программу? Возможно, это произошло, поскольку в этой программе не было никаких входов или ничего. Если я хочу пройти через TDD с этой программой, у которой есть 2 функции и 2 входа, как я буду продолжать? Потому что в конечном итоге это то, что я пытаюсь сделать атм. – Karl

0

Вы можете проверить, был ли модуль импортирован или выполнен с использованием атрибута __name__. Если скрипт выполнен, атрибут равен '__main__'.

Это также хороший стиль для определения основной функции, содержащей код, который должен быть выполнен.

def main() 
    # do something 
    pass 

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