Как добавить в питон код

Копирование и вставка кода в интерпретатор Python

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

class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' def disable(self): self.HEADER = '' # I think stuff gets mangled because of the extra level of indentation self.OKBLUE = '' self.OKGREEN = '' self.WARNING = '' self.FAIL = '' self.ENDC = '' 

11 ответов

Вы можете вызвать execfile (имя файла). Более или менее то же, что и импорт модуля, за исключением того, что он пропускает часть администрирования модуля и не требует, чтобы вы добавляли папку в sys.path.

EDIT: для ответа на исходный вопрос: копируемый код может быть выполнен путем вызова exec (codestring).

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

@Bryan Брайан Оукли: Вы правы, execfile (имя файла) не может быть использовано для этого. exec (codestring) может, однако.

Чтобы этот ответ был актуальным, обратите внимание, что execfile был удален из python 3. См. Stackoverflow.com/q/436198/353278

Обычно вы можете легко и безопасно выполнить вставку копий с помощью IPython, используя команды %cpaste (вручную заканчивайте код с помощью — ) и %paste (выполняйте код немедленно). Это очень удобно для тестирования кода, который вы копируете, например, с веб-страниц или из вашего редактора: эти команды даже отбрасывают для вас начальные подсказки (например, In[1] и . ).

IPython также имеет команду %run которая запускает программу и оставляет вас в оболочке Python со всеми переменными, которые были определены в программе, чтобы вы могли поиграть с ними.

Чтобы получить помощь по следующим функциям: %cpaste? , так далее.

Вы можете просто преобразовать все вкладки в пробелы и удалить пустые строки ВСЕ. Таким образом, вы сможете вставить любой код в консоль python (например: python2.6)

Читайте также:  Тег TITLE

Вы можете просто импортировать файл в интерпретатор python. Это загрузит класс и позволит вам запустить код.

Например, создайте файл с именем «bgcolors.py» и скопируйте и вставьте свой код внутри. Затем, используя интерпретатор python, вы просто набираете «import bgcolors», и вы должны иметь возможность запускать его.

Вы можете прочитать здесь:

Второй import bgcolors в том же сеансе ничего не даст, потому что импорт «знает», что bgcolors уже импортирован.

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

Я думаю, что опция -m работает только для файла в sys.path. Но моего сценария нет в стандартной библиотеке.

@wpeters: работает как любой импорт. Если ваш модуль не находится в текущем каталоге, в любой bourne-совместимой оболочке вы можете вызвать python следующим образом: PYTHONPATH=/path/to/module/dir python -m bgcolors.py или любым другим способом установить среду PYTHONPATH переменная.

Вы можете использовать IPython, что намного лучше, чем python repl. Он имеет команду для ввода из внешнего редактора с помощью команды% edit.

Dreampie позволяет копировать и вставлять код с правильным отступом.

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

Мой ответ в основном посвящен копированию в стандартную оболочку python (проверяется только на linux).

В зависимости от того, откуда приходит код и как он изначально отформатирован , пробелы могут иметь значение или не иметь значения. В частности, ваш примерный фрагмент — скопированный из раздела SO-форматирования SO — это не имеет значения (предполагается, что код правильно отступом для исполняемого файла).

Пустая строка, однако, вызывает проблемы в стандартном интерпретаторе python, так как обычно это de-indent cmd оболочки. В вашем фрагменте фрагмента пустая строка, предшествующая определению функции disable() , заканчивается/выходит из определения класса преждевременно, поэтому, когда строка определения disable() появляется с ошибкой отступа, обнаружено:

>>> class bcolors: . HEADER = '\033[95m' . OKBLUE = '\033[94m' . OKGREEN = '\033[92m' . WARNING = '\033[93m' . FAIL = '\033[91m' . ENDC = '\033[0m' . >>> def disable(self): File "", line 1 def disable(self): ^ IndentationError: unexpected indent >>> 

Поэтому вам просто нужно обратить внимание на эти пустые строки. Для работы над этой пустой строкой вам нужен всего 2 многострочных инструмента для копирования-вставки.

Единственное, что мне было нужно — для копирования только разделов уже вдавленного кода (например, функций из внутренних классов) — один дополнительный уровень отступов, чтобы не требовать повторного ввода отступа скопированного кода. Для этого ведущая строка if 1: перед вставкой фрагмента и Enter (т.е. Пустая строка) после трюка:

>>> if 1: . def disable(self): . self.HEADER = '' # I think stuff gets mangled because of the extra level of indentation . self.OKBLUE = '' . self.OKGREEN = '' . self.WARNING = '' . self.FAIL = '' . self.ENDC = '' . >>> 

Альтернатива использованию двух операций копирования-вставки — просто убедиться, что «пустая» строка имеет отступ с тем же количеством, что и остальная часть вашего кода. И чтобы избежать использования if 1: есть несколько альтернатив: если у вашего редактора есть выбор визуальных блоков (а не выбор строк), используйте это. Или выберите строки, которые вы хотите скопировать, и удалите отступ перед их копированием.

Читайте также:  Edit wp config php file

Существует встроенный вызов метода «область отступа и область выделения», и вы можете просто использовать его. После того, как вы вставляете много кода сразу, вы можете выбрать их все и отредактировать пробелы.

Источник

Python import, как и для чего?

В языке программирования Python подключение пакетов и модулей осуществляется с помощью import. Это позволяет распределять код по логическим «узлам» приложения(модели данных, обработчики, и тп.), что позволяет получить менее нагруженные кодом файлы.

  • Повышается читаемость кода.
  • Код логически разбит по «узлам», его поиск и дальнейший отлов ошибок становится понятнее и проще.
  • Для разработки в команде это дает более четкое понимание, что и где делает каждый при выполнении «задания».

Как использовать import?

Синтаксис import в Python достаточно прост и интуитивно понятен:

# В данной строке импортируется something_we_want import something_we_want # В данной строке импортируется something_we_want, как aww(логично и просто) import something_we_want as aww # В данной строке импортируется из something_we_want something(логично и просто) from something_we_want import something # В данной строке импортируется из something_we_want something, как s(логично и просто) from something_we_want import something as s # Синтаксис as позволяет обращаться к импортируемому по новому нами описанному # далее имени(это работает только в рамках нашего файла)

Что можно импортировать?

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

def something(): pass somedata = 5
# 1 случай import something_we_want something_we_want.something() import something_we_want print(something_we_want.somedata) # 2 случай import something_we_want as aww aww.something() import something_we_want as aww print(aww.somedata) # 3 случай from something_we_want import something something() from something_we_want import somedata print(somedata) # 4 случай from something_we_want import something as s s() from something_we_want import somedata as sd print(sd) # Классы импортируются по аналогии с функциями

Красиво, читаемо и понятно.

В чем же подвох?

Но даже в таком простом примере есть подвох, о котором многие не догадываются(если вы начинающий программист, то лучше перейдите к следующему оглавлению).

Идеология Python достаточно интересна, что позволяет ему иметь низкий порог вхождения, низкое время написания кода, высокую читаемость, но именно в ней и кроется подвох.

Читайте также:  Python and functional programming

По своему опыту использования данного языка, сложилось отчетливое ощущение главной идеи ООП(все есть объект). Что же в этом плохого?

Все файлы, функции и тд. это объект. Но что это за объект и класс стоят за файлами(модулями)?

Все просто, это любимый всеми программистами класс, использующий паттерн проектирования Singleton.

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

Ветвистая структура приложения и существующие подходы импортирования

Часто в разработке приложений программисты пытаются разбить программу по логическим «узлам». Данный подход повышает читаемость и позволяет вести разработку в команде(один человек занимается реализацией одного «узла», второй другого). Так порождается структура приложения, которая зачастую виду сложности функционала является достаточно обширной(ветвистой, потому что имея одну точку входа откуда уже обрастая функционалом это становится похожим на дерево).

Пример ветвистой структуры:

Существует 2 подхода импортирования(лучше выбрать один и придерживаться его весь проект):

Пример именованного импорта из models.py в auth.py:

# auth.py from app.models import User

Пример неименованного импорта из models.py в auth.py:

# auth.py from ..models import User # Количество точек указывает на сколько (обьектов) мы поднимаемся от исходного. # В данном примере первая точка поднимает нас на уровень обьекта handlers, # А вторая точка поднимает нас на уровень обьекта app

Это два абсолютно разных подхода. В первом случае мы «идем» из «корня»(входной точки нашего приложения). Во втором случае мы «идем» от «листа»(нашего файла).

Плюсы и минусы подходов импорта:

Видна структура импорта и приложения.

Видна часть структуры импорта.

Программисту не нужно знать полную структуру приложения.

Импорт не зависит от точки входа.

Код становится не привязанным к приложению. Что по сути позволяет исполнить код из любой точки(тесты, отдельно и тд.). Повышается отлаживаемость. Появляется возможность разработки отдельных узлов приложения без полного вовлечения программиста в проект.

Импорт зависит от точки входа.

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

Снижается читаемость импорта.

Хоть первый подход и имеет существенные минусы в использовании, но тем не менее он популярен. Программистам он привычнее, хоть и имеет недостатки. А начинающие часто не задумываются об альтернативах.

P.S.

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

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

Источник

Оцените статью