Вы когда -нибудь были в интерактивной реплике Python и говорили себе: «Знаете, это приятно и все, но … Что -то не хватает. Там недостаточно я ! » Ну, не волнуйся больше! Я покажу вам, как сделать это за двадцать строк или меньше! Позвольте мне представить главную достопримечательность:
Код
Как бы бесполезно это ни звучало, это правда. Python имеет модуль в стандартной библиотеке под названием Код
Анкет Вы можете проверить Кодовая документация модуля Если ты мне не веришь. Документация, возможно, немного сложно понять на первом прохождении, поэтому я подумал, что создаю несколько примеров, чтобы показать это. Есть несколько объектов в код
Модуль, но только тот, о котором я собираюсь поговорить об этом времени: взаимодействовать
.
Взаимодействовать
Давайте погрузимся. Я покажу тебе. Давайте создадим новый файл в нашем каталоге под названием Shell.py
Анкет
#!/usr/bin/env python # I'll be using Python 3, for reference. import code # seems silly, but works great def custom_repl(): pie = "delicious" pi = 3.14159 homonyms = (pie != pi) code.interact( banner="Hello! My name is Jeeves! I am fancy. 🎩", local=locals(), exitmsg="Ta-ta!" ) if __name__ == "__main__": custom_repl()
Попробуйте запустить его и посмотрите магическую работу.
$ python3 shell.py Hello! My name is Jeeves! I am fancy. 🎩 >>> pi 3.1415 >>> pie 'delicious' >>> homonyms True >>> 4 + 3 7 >>> import math >>> math.sqrt(pi) 1.7724531023414978Ta-ta!
Как вы можете видеть, показывает на баннерное сообщение, которое мы указали, показывает сообщение о выходе, которое мы указали (хотя оно не сработало для меня, если я использовал встроенный exit ()
или quit ()
Команды ), и у нас был доступ к локальным переменным, когда взаимодействовать
назывался. И мы можем использовать все, чтобы действовать в качестве нашего местного штата! Вернуться и создать Shell2.py
Анкет
#!/usr/bin/env python # shell2.py import code class Car: def __init__(self, color, mileage): self.color = color self.mileage = mileage def honk(self): return "Beep!" def __repr__(self): return "".format(self.color, self.mileage) if __name__ == "__main__": c = Car("red", 20000) code.interact( banner="Now interactively inspecting {}".format(c), local={"car": c}, )
Вернувшись в оболочку … Python3 Shell2.py
Now interactively inspecting>>> car >>> car.honk() 'Beep!'
Имейте в виду, что местный
параметр к взаимодействовать
должен быть диктом – такой как возвращенным local ()
и Global ()
Анкет
Заворачивать
Вы можете использовать это, чтобы обеспечить хороший интерактивный аспект для вашего приложения, чтобы помочь вам делать вещи оболочки, осмотреть объекты, отладка и многое другое. Это примерно как PDB Работает тоже! Django и Flask оба используют вариант этого для своих команд “оболочки”. Я думаю, что я попытаюсь использовать его для создания автоматической викторины или домашней работы для класса Python вступительного класса (подобно пакет вихрь в R ). Есть ли другие классные способы этого? Дай мне знать!
Первоначально опубликовано мой блог
Оригинал: “https://dev.to/rpalo/your-own-python-repl-in-twenty-lines-or-less”