Как вставить программу в питон

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

class bcolors: HEADER = ‘33[95m’ OKBLUE = ‘33[94m’ OKGREEN = ‘33[92m’ WARNING = ‘33[93m’ FAIL = ‘33[91m’ ENDC = ‘33[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 = »
wp123 23 март 2010, в 17:11
Поделиться
Используйте достойный редактор (я имею в виду Emacs), и вам не нужно будет копировать / вставлять.
tripleee 04 март 2015, в 12:01

Как использование Emacs может помочь в вставке копий с python.org в терминал?
Petri Sirkkala 05 нояб. 2015, в 13:09
В micropython есть специальный режим вставки, доступный по нажатию ctrl-E
Willem Hengeveld 15 авг. 2017, в 16:38

Установка Python на Windows 10

Показать ещё 1 комментарий
Поделиться:

11 ответов

Лучший ответ

Вы можете вызвать execfile (имя файла).

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

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

Pieter Witvoet 23 март 2010, в 18:12
Поделиться
как это отвечает на вопрос «как вставить код Python?»
Bryan Oakley 23 март 2010, в 21:36

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

wp123 24 март 2010, в 04:21
Pieter Witvoet 25 март 2010, в 08:17

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

Jeff 03 июль 2017, в 17:56
Показать ещё 2 комментария

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

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

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

Eric Lebigot 23 март 2010, в 22:35
Поделиться
JetBrains PyCharm также поддерживает это!
Andrew 01 нояб. 2013, в 18:22
В Ipython 5 просто вставьте код. Прочитайте мой ответ здесь

Читайте также:
Какие программы распознания текста вы знаете

Как установить Python?

Levon 17 июль 2016, в 09:13

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

0script0 23 июнь 2016, в 10:11
Поделиться

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

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

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

Anton 23 март 2010, в 15:52
Поделиться

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

msw 23 март 2010, в 15:49

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

vezult 23 март 2010, в 15:49

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

wp123 23 март 2010, в 16:03
vezult 25 март 2010, в 02:07
Показать ещё 2 комментария

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

Łukasz 23 март 2010, в 16:24
Поделиться
Мне нравится это решение, потому что оно не требует использования другой IDE.
wp123 23 март 2010, в 16:09

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

Ash 23 март 2010, в 17:07
Поделиться

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

msw 23 март 2010, в 16:58
Поделиться

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

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

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

>>> class bcolors: . HEADER = ‘33[95m’ . OKBLUE = ‘33[94m’ . OKGREEN = ‘33[92m’ . WARNING = ‘33[93m’ . FAIL = ‘33[91m’ . ENDC = ‘33[0m’ . >>> def disable(self): File «», line 1 def disable(self): ^ IndentationError: unexpected indent >>>

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

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

Читайте также:
Список программ ТВ 3

>>> 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 = » . >>>
Dan Cornilescu 08 сен. 2016, в 18:19
Поделиться

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

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

Jeff 03 июль 2017, в 18:03

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

Источник: overcoder.net

Русские Блоги

Вопрос: Скопируйте текст, откройте python и щелкните правой кнопкой мыши, чтобы вставить. Но если это ярлык на рабочем столе Python, правильная клавиша не может быть вставлена

Интеллектуальная рекомендация

Упражнение по сценарию использования RabbitMQ: проверенный идентификатор пользователя, ограничение длины (12)

[list][*][b]Validated User ID[/b][/list] При отправке сообщения укажите идентификатор пользователя, и только имя пользователя текущего соединения может отправить сообщение (тест обнаружил, что имя пол.

Источник: russianblogs.com

Пакеты и модули Python

В крупных Data Science проектах часто приходится сталкиваться с тем, что Python-приложение разрастается и его нужно как-то организовывать. В этой статье мы расскажем вам, как работать с пакетами и модулями Python: разберем запуск модулей, прямые и косвенные обращения, объединение в пакеты, относительные импорты и рекомендации PEP 8 по импорту.

Запуск модулей в командной строке

Python-файлы, или модули, с расширением .py запускаются с командной строки. Файлы, которые находятся в одной папке, могут импортировать переменные, функции и классы друг друга. Рассмотрим пример с двумя файлами, один из которых импортирует функцию другого:

# Файл one.py def foo(s): print(s) foo(«python»)
# Файл two.py import one one.foo(«school»)

Строчка import one не только импортирует файл, но и запускает его, поэтому можно наблюдать двойной результат:

$ python one.py python $ python two.py python school

Для импорта конкретных объектов используют конструкцию from . import . , тогда не потребуется писать вызовы через точку. Ниже показан пример такого использования.

# Файл two.py from one import foo foo(«school»)
$ python two.py python school

В Python нет главной функции main

В отличие от многих языков программирования, в Python нет функции main() , которая запускает всю программу. Но, возможно, вам встречалось видеть __name__ == “__main__” . Дело в том, что Python создает переменную __name__ , которой присваивается имя модуля такое, что:

  • если модуль запускается напрямую, то этой переменной будет присвоено __main__ ;
  • если модуль будет запущен через импорт, то ему будет присвоено само название модуля.

Допустим, у нас также имеется два файла, лежащие в одной папке:

# Файл one.py def foo(s): print(s) def bar(): print(__name__) if __name__ == «__main__»: foo(«python») bar()
# Файл two.py import one one.foo(«school») one.bar()

Запуск файла one.py присвоит переменной __name__ значение __main__ , тогда этот блок с if сработает:

$ python one.py python __main__

Запуск файла two.py , который содержит импорт файла one.py не запустит блок с if, потому что название модуля соответствует one:

Читайте также:
Программа с помощью которой можно восстановить удаленные файлы на телефоне

$ python two.py school one

В конструкцию __name__ == “__main__” вставляют код, который может быть запущен только в результате прямого обращения.

Объединяем модули в пакеты

Разбиение разного функционала по файлам — хорошая идея, поскольку в будущем будет удобно к ним обращаться. Именно такую иерархическую структуру имеют библиотеки и фреймворки: мы знаем, что, например, в tf.keras находится классы для создания архитектуры модели машинного обучения (Machine Learning). Обсудим, что нужно, чтобы организовать свои Python-файлы.

Объединение файлов под одним названием называется пакетом. Чтобы инициализировать такой пакет, достаточно создать пустой файл __init__.py в папке. Вот так, например, может выглядеть структура пакета:

ml/ __init__.py supervised_learning/ __init__.py decision_tree.py linear_reg.py unsupervised_learning/ __init__.py pca.py k_means.py

Заметим, что сам пакет ml имеет также два других пакета, так как у каждого из них имеется файл __init__.py . Теперь импорты могут выглядеть следующим образом:

import ml.supervised_learning.decision_trees from ml.supervised_learning import decision_trees import ml.unsupervised_learning.pca as pca

Эти три строчки примеры абсолютного импорта.

Относительные импорты внутри пакета

Импорт модулей может быть также и относительным. Обращаясь к предыдущему примеру с пакетом ml , требуется в модуле unsupervised_learning.pca импортировать k_means . Это выглядит так:

# внутри ml/unsupervised_learning/pca.py from . import k_means

А чтобы из этого же модуля импортировать supervised_learning.linear_reg , нужно добавить две точки:

# внутри ml/unsupervised_learning/pca.py from ..supervised_learning import linear_reg

Относительные импорты должны содержать ключевое слово from . Ниже рассмотрены правильные и неправильные варианты.

# внутри ml/unsupervised_learning/pca.py from . import k_means # ОК (относительный импорт) from ml.unsupervised_learning import k_means # ОК (абсолютный импорт) import k_means # Ошибка import .k_means # Ошибка

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

Наконец, стоит отметить, что относительные импорты работают только для модулей надлежащего пакета, поэтому попытка обратиться к ним со стороны может оказаться неудачей. Но, чтобы обойти эту проблему, нужно указать флаг -m и запустить в виде модуля. Примеры ниже иллюстрируют правильный и неправильный способ запуска модулей со стороны, которые содержат относительные импорты.

$ python ml/unsupervised_learning/pca.py # Ошибка относительных импортов $ python -m ml.unsupervised_learning.pca # ОК

Рекомендации PEP 8

Здесь мы также приведем примеры импорта согласно PEP 8 — документ с рекомендациями по стилю кодированию на Python.

    Импорт отдельных модулей/пакетов должны осуществляться на разных строчках:

# Правильно import os import sys
# Неправильно import os, sys
Тем не менее, в порядке вещей импортировать объекты из одного модуля/пакета:
# Правильно from subprocess import Popen, PIPE
«»»Это документация к модулю Все dunders находятся перед импортами. «»» from __future__ import barry_as_FLUFL __all__ = [‘a’, ‘b’, ‘c’] __version__ = ‘0.1’ __author__ = ‘Cardinal Biggles’ import os import sys

  1. Стандартные Python-библиотеки.
  2. Связанные сторонние библиотеки.
  3. Локальные пакеты/модули.

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

import mypkg.sibling from mypkg import sibling from mypkg.sibling import example

В следующей статье поговорим о тестировании кода на Python. А как на практике эффективно организовать файлы с вашими Data Science проектами, вы узнаете на наших Python-курсах в лицензированном учебном центре обучения и повышения квалификации IT-специалистов в Москве.

Источник: python-school.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru