2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Python. Использование алгоритмом ранее сохраненного кода.
Сообщение05.12.2017, 20:07 


05/12/17
8
Привет всем. Помогите пожалуйста разрешить возникший вопрос. В процессе выполнения одной программы нужно вызвать выполнение сохраненной ранее как бы подпрограммы. То есть в папке 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 
Заслуженный участник
Аватара пользователя


16/07/14
8449
Цюрих
importlib либо (лучше) напишите функцию и вызывайте ее.

 Профиль  
                  
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение05.12.2017, 21:29 


05/12/17
8
mihaild в сообщении #1272364 писал(а):
importlib либо (лучше) напишите функцию и вызывайте ее.
а функцию содержащуюся в другом файле как вызывать можно?

 Профиль  
                  
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение05.12.2017, 21:44 
Заслуженный участник
Аватара пользователя


16/07/14
8449
Цюрих
m_env в сообщении #1272372 писал(а):
а функцию содержащуюся в другом файле как вызывать можно?
А вы по какому источнику python изучаете? Во всех известных мне учебниках где-то рядом с описанием import есть и описание, как вызывать функции из других модулей.

 Профиль  
                  
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение05.12.2017, 23:00 


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

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


16/07/14
8449
Цюрих
Собственно код из других файлов используется как раз через механизм импортирования.
(теоретически другие способы есть, но они очень плохие)

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

 Профиль  
                  
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение06.12.2017, 17:01 


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

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

 Профиль  
                  
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение06.12.2017, 23:06 
Заслуженный участник


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

 Профиль  
                  
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение07.12.2017, 16:35 


05/12/17
8
arseniiv в сообщении #1272738 писал(а):
Ну, во-первых, не строчка, а сам файл, а во-вторых, почему бы не почитать https://docs.python.org/3/tutorial/modules.html
. Это кусок вводной части официальной документации.

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

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

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

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

 Профиль  
                  
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение07.12.2017, 23:18 
Заслуженный участник


31/12/05
1480
m_env в сообщении #1272335 писал(а):
То есть в папке C:\Users\.......\Local\Programs\Python\Python36 я сохранил файл *.py с кодом.
Не надо так. У вас есть своя папка проекта, там и работайте.

 Профиль  
                  
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение08.12.2017, 16:08 


05/12/17
8
tolstopuz в сообщении #1272994 писал(а):
Не надо так. У вас есть своя папка проекта, там и работайте.
Хорошо. В ближайшее время планирую создать свой каталог модулей и добавить к нему путь с помощью sys.path.append ()

 Профиль  
                  
 
 Re: Python. Использование алгоритмом ранее сохраненного кода.
Сообщение09.12.2017, 20:39 


05/12/17
8
Добавить путь созданной папки к списку путей поиска модулей 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 
Заслуженный участник


27/04/09
28128
Лучше сделать нормальный пакет, содержащий этот модуль, и установить его. Это с одной стороны, и обычно когда модуль уже более-менее проработан. С другой стороны, если модуль нужен только для одного проекта, то и надо открывать IDLE для этого проекта*, модуль там будет доступен для импорта. По крайней мере, эти способы обходятся без плохообратимого загрязнения рабочей среды.

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

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


16/07/14
8449
Цюрих
Собственно import умеет загружать модули и пакеты из текущего каталога.
m_env, серьезно, тут явно лучше почитать учебник, а не собирать знания из обрывков.

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


05/12/17
8
Понял. Буду работать.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group