Разбиваем 3 пасхальных яйца Python

Разбиваем 3 пасхальных яйца Python

26 ноября 2022 г.

Консоль

Ада: Хватит скучной стороны программирования, давайте посмотрим на забавную часть Python. Мы собираемся использовать консоль. Возможно, вы знаете, что произойдет, если вы наберете python spam.py.

Кнут: Легко. Он выполнит файл Python с именем spam.py.

Ада: Действительно. А что будет, если такого файла нет?

Кнут: Полагаю, ошибка.

Ада: Верно. Что произойдет, если я полностью пропущу файл? Я просто набираю python.

Кнут: ...

Ада: Я добираюсь до кишечного тракта компьютера.

Кнут: ?

Ада: Смотри, мы подходим к другой консоли. Но это другое, как вы можете сказать по его внешнему виду. Вместо одного > его подсказка >>> показывает, что мы в три раза глубже. Все, что вы введете с этого момента, будет напрямую интерпретировано Python.

Кнут: Я бы не назвал это кишечником компьютера.

Ада: Значит, это центр мозга. Вы можете ввести 1+2, и он распечатает результат. Разве это не удивительно?

>>> 1+2
3

Кнут: Это элементарная математика.

Ада: Как насчет 1089*9?

Кнут: Не знаю. Вы просто открываете приложение калькулятора. Я вижу это умножение как обратную сторону удивительного.

Ада: Гнизама? Или вы имеете в виду число? Тогда вы правы:

>>> 1089*9
9801

Кнут: 😮

Ада: У вас есть несколько полезных функций. Вы можете быстро сложить числа от 1 до 1000

>>> sum(range(1, 1001))
5050

Да, он считает только до 1000 и исключает верхний предел. Но хватит слишком легкодоступных функций.

Здравствуйте

Ада: Все самое лучшее в жизни спрятано в секретном ящике. Python называет секретный ящик модулем. Чтобы получить доступ к его содержимому, вы должны сначала импортировать его.

Кнут: Вы действительно набираете импорт секретного ящика или как?

Ада: Почти. Имена модулей могут содержать только буквенно-цифровые символы и знаки подчеркивания, но не пробелы. Python действительно любит символы подчеркивания.

Кнут: импортировать secret_drawers, тогда?

Ада: Это было бы синтаксически правильно. К сожалению, такого модуля нет. Но я только что узнал, что ты можешь

>>> import secrets

Ада: Обратите внимание, что импорт модуля обычно происходит тихо, он ничего не печатает. Не только в случае с модулем secrets.

Кнут: Вы говорили о секретном ящике.

Ада: доступ к нему осуществляется с помощью оператора .. Давайте заглянем в этот модуль.

>>> secrets.token_hex()
'007da1d6b80405afa8db1a5af21ef716316bab08141dc4b21c1d5dccbec13315'

Кнут: Он даже начинается с 007, чтобы не оставлять сомнений.

Ада: Я хотела поговорить о чем-то более открытом и простом.

>>> import __hello__
Hello world!

Кнут: Подождите, вы сказали, что импорт модуля бесшумный.

Ада: Это исключение. Он становится тихим после первого импорта:

>>> import __hello__
Hello world!
>>> import __hello__

Кнут: Почему так много подчеркиваний? Почему бы просто не импортировать привет?

Ада: Хм, не знаю, дай мне пару минут:

>>> import time
>>> time.sleep(5 * 60)

Ада: Оказывается, это больше, чем внутренняя шутка, это тестовый пример для расширенной функции. Когда он был нарушен в более ранней версии Python, некоторые разработчики сочли его блокирующим выпуск.

Антигравитация

(Ада открывает консоль) Кнут: Держу пари, ты собираешься импортировать еще один модуль.

Ада:

>>> import antigravity

Кнут: Он ничего не печатает... подождите, он открывает окно браузера...

Ада: и это приведет вас к этому комиксу XKCD Вчера я написал 20 коротких программ на Python. Это было замечательно. Perl, я оставляю вас. Кнут: Опять это "привет, мир".

Ада: Говорят, когда вы начинаете изучать новый язык программирования, первая программа должна вывести это сообщение. Посмотрите, как вы можете сказать "Привет, мир" на 53 различных языках программирования< /а>.

Для сравнения, вот та же программа на Java:

Кнут: Я понимаю энтузиазм летающей фигурки. Позвольте мне написать мою первую программу.

Кнут: Это не совсем то, что я ожидал.

Ада: Этот комикс был нарисован в те времена, когда Python был еще молодым в версии 2. Он не был очень дисциплинированным, ему не требовались родители для печати. Питон повзрослел, говорят, это уже 3 версия, а теперь немного построже.

Кнут:

Кнут: Ничего себе, моя первая программа работает! Что еще мы можем найти в этом ящике?

Ада: Есть способ это выяснить.

Ада: В нем перечислены даже модули, используемые этим модулем, например webbrowser, который открыл для вас XKCD.

Кнут: Что такое geohash?

Ада:

Ада (🤷): Дай мне несколько минут.

Ада: Манро — это имя парня, который рисует XKCD. Я не понимаю как минимум половины его шуток. К счастью, есть сопутствующий сайт, который дает объяснения. Но даже 353: Python - объясните xkcd ни слова об этой функции. Затем я нашел The History of Python: import antigravity, где Гвидо ван Россум, сам создатель Python добавил ссылку на 426: Geohashing - объясните xkcd. Функция geohash — это пасхальное яйцо внутри пасхального яйца.

Спам

Кнут: Что вы будете импортировать дальше?

Ада: Вам нравится спам?

Кнут: Моя ненависть к ней горит горячее, чем пламя Роковой Горы.

Ада: Тогда давай попробуем.

>>> import spam

Кнут: Ничего не печатает.

Ада: Подожди

>>> spam.system('pwd')
/home/ada/easter-eggs
>>> spam.system('ls')
hello.py
intro.py
spam.py
...

Кнут: Значит, это модуль, который может выполнять любую команду в оболочке?

Ада: Да, это простой интерфейс к библиотечной функции system().

Кнут: Значит, это не проблема безопасности?

Ада: Ты прав, это не так. Документация предполагает, что это скорее шутка:

>>> print(spam.__doc__)
 This is a dummy implementation of the spam module.

 It exists to show that a package can contain modules that are not
 intended to be directly imported but are defined to be discoverable by
 introspection.

 See the documentation for the builtin __import__() function for more
 information.

Кнут: Но это не шутка. На самом деле он может запускать команды оболочки.

Ада: Думаю, это шутка. Это даже не реальная реализация. Это всего лишь заполнитель.

>>> spam.system('cat /usr/lib/python3.6/spam.py')
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AttributeError: module 'spam' has no attribute 'system'

Ада: Это называется спамом из-за ссылки на набросок Монти Пайтона. Название языка программирования — дань уважения Монти Пайтону, его происхождение никак не связано со змеей.

Это

Ада: Я хочу показать тебе еще кое-что.

Кнут: Ты обещал разбить 3 пасхальных яйца. Это четвертый.

Ада: Говоря об этом

>>> import this

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Кнут: Кто такой Тим Питерс?

Ада: Вероятно, один из первых участников. Мне нравится, что он не писал математические правила, а использовал поэтический подход.

Кнут: Моя любимая часть: "Должен быть один - и желательно только один - очевидный способ сделать это".

Ада: Это ответ на девиз Perl: Это можно сделать несколькими способами. Это был еще один язык программирования того времени, когда был создан Python. Если навести курсор на изображение Антигравити, можно прочитать "Это было чудесно. Перл, я ухожу от тебя".

Кнут: Почему один из способов более очевиден для голландцев? «Монти Пайтон» — британская комедийная труппа.

Ада: Но Гвидо ван Россум голландец. Если вы попытаетесь

>>> import guido

Кнут: Ты мне не говоришь...

Ада: Нет, такого модуля нет. На самом деле одного из модулей, которые я представил, не существует, я его только что придумал. В этом эссе действительно 3 пасхальных яйца и 1 яйцо кукушки. Вам решать, что есть что.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE