2013-06-22 4 views
2

Я исхожу из PHP (а также из множества других вещей), и я играю с Python. В PHP, когда я хочу включить другой файл, я просто делаю include или require, и все в этом файле включено.Немного путают с импортом python

Но кажется, что рекомендуемый способ делать вещи в python - это from file import, но это похоже на то, чтобы включить библиотеки и прочее? Как вы отделите свой код от нескольких файлов? Это единственный способ сделать это, чтобы иметь один файл с целым набором вызовов функций, а затем импортировать 15 других файлов?

+0

Я не отвечаю на ваш вопрос, потому что он не на 100% ясен, и я, вероятно, в конечном итоге отвечу на другой вопрос, но вы должны прочитать о '__init __. Py'-файлах и переменной уровня __all__'. – shx2

+1

Что вы видите как разные между «включением» вещей из файла и «импортом» из этого файла? – BrenBarn

+0

Я сделал это, чтобы объединить несколько операторов 'import' в один, используя пакеты. Однако предположим, что я не хочу, чтобы в главном файле python было 15 вызовов функций, я хочу, чтобы main.py имел 7 и child.py, чтобы иметь 8. И main.py будет включать child.py в некоторый номер строки, который будет заполняться содержимое child.py в main.py в этом месте. Точно так же, как работает php. Это то, о чем я думаю ... может быть, я думаю об этом неправильно? – Steven

ответ

7

Все вещи совершенно разные между PHP и Python, и есть много причин.

Но кажется, что рекомендуемый способ делать вещи в python - это from file import, но это похоже на то, чтобы включить библиотеки и прочее?

Действительно, операторы import предназначены для импорта объектов из другого модуля в текущий модуль. Вы можете импортировать все объекты импортируемого модуля текущего модуля:

import foo 

print foo.bar 

или вы можете выбрать то, что вы хотите от этого модуля:

from foo import bar 

print bar 

и даже лучше, если импортировать модуль в два раза , он будет только один раз импортирован:

>> import foo as foo1 
>> import foo as foo2 
>> foo1 is foo2 
True 

Как вы отделяете код среди нескольких файлов?

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

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

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

if __name__ == "__main__": 

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

if __name__ == "__main__": 
    main() 

Это единственный способ сделать это, чтобы иметь один файл с целой кучей вызовов функций, а затем импортировать 15 других файлов?

Это не единственный способ сделать это, но это лучший способ сделать это. Вы делаете все свои алгоритмы в библиотеках функций и объектов, а затем импортируете точно, что вам нужно в других библиотеках и т. Д. Вот как вы создаете целую юниверсу многоразового кода и никогда не должны изобретать велосипед! Поэтому забудьте о файлах и подумайте о модулях, содержащих объекты.

Наконец, мой лучший совет для вас, изучающий python, - это unlearn всякая привычка и использование, которые вы имели при кодировании PHP, и изучать все это по-другому. В конце концов, это может сделать вас лучше инженером-программистом.

1

Интересный вопрос. Как вы знаете, в PHP вы можете отделить свой код с помощью include, который буквально принимает весь код во включенном файле и помещает его туда, куда вы вызывали include. Это удобно для написания веб-приложений, потому что вы можете легко разделить страницу на части (например, заголовок, навигация, нижний колонтитул и т. Д.).

С другой стороны, Python используется для использования не только в веб-приложениях. Чтобы повторно использовать код, вы должны полагаться на функции или старое объектно-ориентированное программирование. PHP также имеет функции и объектно-ориентированное программирование FYI.

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

Допустим, у вас есть функция foo в файле file1.py. С file2.py вы можете написать import file1. Затем вызовите foo с помощью file1.foo(). В качестве альтернативы напишите from file1 import foo, а затем вы можете позвонить в foo с номером foo(). Обратите внимание, что from позволяет вам напрямую вызвать foo. Для получения дополнительной информации просмотрите документы python.

+0

Я думаю, что ответ на мой вопрос, как и в PHP, который вы используете, не нужно включать в себя ... Вы просто импортируете и запускаете функции или что-то в тех местах, которые вам нужны. У версии PHP может быть разделение заголовка/нижнего колонтитула/etc и включено в их пятна. В этом случае у вас будет 'header()' 'footer()' и т. Д. Внутри их пятен? Спасибо – Steven

+1

@Steven: Это не имеет смысла, потому что Python не является языком HTML-шаблона. Так что в первую очередь нет «пятен». –

2

Думаю, я понимаю, что вы пытаетесь сказать и делать.

Вот случайный включают пример из PHP:

File # 1 - vars.php

<?php 

$color = 'green'; 
$fruit = 'apple'; 

?> 

File # 2 - main.php

<?php 

echo "A $color $fruit"; // A 

include 'vars.php'; 

echo "A $color $fruit"; // A green apple 

?> 

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

«Импорт» Python, однако, импортирует модуль или его часть, поэтому вы можете работать с ним в своем текущем модуле.

Вот питон пример:

Файл 1 - echo.py

apple = 'apple' 
    color = 'green' 

Файл 2 - main.py

import echo 

def func(): 
    print "A "+echo.color+" "+echo.fruit 

if __name__ == '__main__': 
    func() 

Другими словами - вы импортировать некоторые функции от одного модуль, а затем использовать его в другом модуле.

Приведенный выше пример не очень хорош в стандартах программирования или лучших практиках, но я думаю, что это дает вам некоторое понимание.

1

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

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

Следовательно, наличие таких вещей, как header() и footer(), не имеет смысла в Python. Это просто функции. Назовите их так, и результат, который они генерируют, будет проигнорирован.

Итак, как вы разделили свой код на Python? Ну, вы разделили его на функции и классы, которые вы вставляете в разные файлы, а затем импортируете.

0

Есть функция execfile(), которая делает что-то неопределенное, сопоставимое с include PHP, здесь, но это почти наверняка то, что вы не хотите делать. Как говорили другие, это просто другая модель и другая потребность программирования в Python. Ваш код будет идти от функции к функции, и на самом деле не имеет никакого значения, в каком порядке вы их ставите, если они находятся в том порядке, в котором вы определяете вещи до их использования. Вы просто не пытаетесь найти какой-то упорядоченный документ, похожий на PHP, так что необходимости там нет.

Смежные вопросы