2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Python. Использование алгоритмом ранее сохраненного кода.
Сообщение05.12.2017, 20:07 
Привет всем. Помогите пожалуйста разрешить возникший вопрос. В процессе выполнения одной программы нужно вызвать выполнение сохраненной ранее как бы подпрограммы. То есть в папке C:\Users\.......\Local\Programs\Python\Python36 я сохранил файл *.py с кодом. И работая например в IDLE Python в интерактивном режиме, определенным алгоритмом нужно вызвать выполнение того сохраненного в файле кода. Это чтоб одну программу собирать из отдельных блоков. Приведу простой пример. Вот это короткий фрагмент сохраненного в файле кода:
Код:
print ("Добрый день!")
А это то что сейчас на экране IDLE в интерактивном режиме:
Код:
>>> t=0
>>> while t<5:
   t=t+1
   print(t)   
else:
   #вот в этом месте нужно вызвать код из файла
Пока получилось только оператором import вызвать код из файла. Но этот оператор наверное больше для подключения модулей подходит, и срабатывает один раз за сессию. Помогите пожалуйста понять какими еще операторами, функциями или способами можно реализовать это. Спасибо.

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение05.12.2017, 21:06 
Аватара пользователя
importlib либо (лучше) напишите функцию и вызывайте ее.

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение05.12.2017, 21:29 
mihaild в сообщении #1272364 писал(а):
importlib либо (лучше) напишите функцию и вызывайте ее.
а функцию содержащуюся в другом файле как вызывать можно?

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение05.12.2017, 21:44 
Аватара пользователя
m_env в сообщении #1272372 писал(а):
а функцию содержащуюся в другом файле как вызывать можно?
А вы по какому источнику python изучаете? Во всех известных мне учебниках где-то рядом с описанием import есть и описание, как вызывать функции из других модулей.

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение05.12.2017, 23:00 
Спасибо. Буду осваивать эти методы. Функцию вызвал опять же через import или from ... import ...
А importlib надо рассмотреть ещё. В общем пока получается что все эти привлечения кода из вне так или иначе посредством оператора import. Хотелось узнать у практикующих наиболее удобный метод связывания отдельных частей(файлов) кода(программы). И интересны альтернативные варианты.
Пока у меня только Карманный справочник Python, Марк Лутц.

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение05.12.2017, 23:19 
Аватара пользователя
Собственно код из других файлов используется как раз через механизм импортирования.
(теоретически другие способы есть, но они очень плохие)

Насколько я понимаю, ваша книга не очень хорошо подходит для изучения языка (особенно если нет опыта с другими). У того же Лутца есть "Изучаем python".

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение06.12.2017, 17:01 
mihaild, книгу Лутца "Изучаем Python" еще не купил, вот присматриваю пока такие книжки как "Дронов, Прохоренок: Python 3 и PyQt 5. Разработка приложений", или "Майкл Доусон: Программируем на Python".

Наверное я ошибочно думал что эти сохраненные в файлах *.py части кода совсем не являются модулями. Я думал что это скрипты какие-то, сценарии или подпрограммы, а модули это другое - несущии особый функционал, и import как раз для них. Но на деле выходит что даже одна строка сохраненного в файле кода так же является модулем? То есть привязывание кода (пусть даже одной строки, выводящей в печать слово) из других файлов это и есть сборка модулей в один алгоритм? А не то что думал там про вызывание скриптов или подпрограмм, которые исполняются не через import а как-то иначе. Вот это положение теперь я правильно понял?

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение06.12.2017, 23:06 
m_env в сообщении #1272620 писал(а):
Но на деле выходит что даже одна строка сохраненного в файле кода так же является модулем?
Ну, во-первых, не строчка, а сам файл, а во-вторых, почему бы не почитать https://docs.python.org/3/tutorial/modules.html. Это кусок вводной части официальной документации.

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение07.12.2017, 16:35 
arseniiv в сообщении #1272738 писал(а):
Ну, во-первых, не строчка, а сам файл, а во-вторых, почему бы не почитать https://docs.python.org/3/tutorial/modules.html
. Это кусок вводной части официальной документации.

Спасибо. Документация вещь основательная, наверное её в первую очередь и надо усвоить. Кстати в Python's IDLE кажется встроена именно эта документация. Я в IDLE в интерактивном режиме тренируюсь.

m_env в сообщении #1272620 писал(а):
думал что это скрипты какие-то, сценарии или подпрограммы, ... Но на деле выходит ... является модулем

Хождение от крайности к крайности случается; но делать заключение и тем более объявлять его не уяснив сущности, перескочив её, не следует. Наспех размыслив, пусть даже в вопросительном ключе, бывает не корректно выражать своё очередное заблуждение. И не надо проводить классификацию предмета с которым не работал.

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

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение07.12.2017, 23:18 
m_env в сообщении #1272335 писал(а):
То есть в папке C:\Users\.......\Local\Programs\Python\Python36 я сохранил файл *.py с кодом.
Не надо так. У вас есть своя папка проекта, там и работайте.

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение08.12.2017, 16:08 
tolstopuz в сообщении #1272994 писал(а):
Не надо так. У вас есть своя папка проекта, там и работайте.
Хорошо. В ближайшее время планирую создать свой каталог модулей и добавить к нему путь с помощью sys.path.append ()

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение09.12.2017, 20:39 
Добавить путь созданной папки к списку путей поиска модулей sys.path (если можно так выразиться) оказалось не столь очевидно. Дело в том, что операция sys.path.append() добавляет путь только для текущей сессии, по завершении которой путь не сохраняется в sys.path (или где там корень этого списка храниться). В общем два варианта разрешения проблемы помогли (ОС Windows 10), и возможно будет полезно поделиться информацией.

В документации Python (Installing Python Modules (Legacy version)) указано на возможность добавить в модуль site.py (расположен в C:\Python\Lib), который считывается при каждом запуске интерпретатора Python, строку с тем самым методом append(). Так как там уже прописан импорт модуля sys добавляю одну строку:
Код:
import sys
import os
import builtins
import _sitebuiltins
sys.path.append ('C:\\Python\\Myfolder')
После чего новая папка становится доступной на постоянной онове в путях поиска sys.path.

Но этот вариант не очень хорош. Будет надежнее, и даже удобнее, добавить переменную окружения PYTHONPATH в переменные окружения Windows. Идём по пути: Панель управления > Система и безопасность > Система > Дополнительные параметры системы > Переменные среды; если в списке окна "Переменные среды пользователя" нет этой самой переменной, нажимаем создать: Имя переменной: PYTHONPATH, Значение: C:\Python\Mymod, OK. Путей можно задать несколько, через точку с запятой. Теперь из обеих папок модули импортируются.

Хорошо было бы отработать и другие способы включения путей. Например пока не сработал вариант с созданием файла *._pth и размещением его в нужном месте. Возможно есть ещё более стабильные решения.

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение10.12.2017, 01:40 
Лучше сделать нормальный пакет, содержащий этот модуль, и установить его. Это с одной стороны, и обычно когда модуль уже более-менее проработан. С другой стороны, если модуль нужен только для одного проекта, то и надо открывать IDLE для этого проекта*, модуль там будет доступен для импорта. По крайней мере, эти способы обходятся без плохообратимого загрязнения рабочей среды.

* Не знаю, как именно, но обычно в таких случаях это возможно (например, GHCi для хаскеля такое умеет).

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение10.12.2017, 02:20 
Аватара пользователя
Собственно import умеет загружать модули и пакеты из текущего каталога.
m_env, серьезно, тут явно лучше почитать учебник, а не собирать знания из обрывков.

 
 
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение10.12.2017, 13:57 
Понял. Буду работать.

 
 
 [ Сообщений: 15 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group