11 забавных пасхалок в Python
Python очень серьезный язык, но он полон «пасхальных яиц» и забавных отсылок. В этой статье мы собрали наиболее интересные скрытые функции одного из самых популярных языков программирования. Обсудить Когда создатель языка Гвидо ван Россум начал внедрять Python, он также читал опубликованные сценарии из «Летающего цирка Монти Пайтона», комедийного сериала BBC 1970-х годов. Ван Россум подумал, что ему нужно короткое, уникальное и немного загадочное имя, поэтому он решил назвать язык Python. Как указано в официальной документации, вовсе не обязательно любить это шоу, чтобы пользоваться всеми преимуществами Python. N.B. Все последующие пасхалки вы можете проверить самостоятельно в интерпретаторе просто запустив команду: Одна из самых забавных пасхалок в Python запускается командой: Команда открывает в браузере комикс XKCD, в котором упоминается Python. Учтите, что вы можете надолго «зависнуть в воздухе» листая комикс!) Модуль антигравитации, ссылающийся на комикс XKCD, в котором упоминается Python, был добавлен в Python 3 Скипом Монтанаро. Любопытно, что в этой пасхалке есть еще одна пасхалка. Изучение реализации модуля antigravity.py обнаруживает скрытую функцию под названием «geohash», которая является ссылкой на другой комикс XKCD о геохешировании. Функция использует алгоритм Рэндалла Манро, который генерирует случайные координаты GPS каждый день на основе промышленного индекса Доу-Джонса и текущей даты. Некоторые считают, что функцию можно использовать для назначения встреч в офлайне ) Zen of Python представляет набор из 19 руководящих принципов для написания компьютерных программ, которые влияют на дизайн языка. Инженер-программист Тим Петерс написал этот набор и разместил его в списке рассылки Python в 1999 году. В списке Петерса оставался открытым 20-й принцип, «который должен заполнить Гвидо». Дзен Питерса был включен под номером 20 в официальные предложения языка Python Enhancement Proposals. Он также включен в интерпретатор Python, как единственное официальное пасхальное яйцо, которое указано как в Руководстве разработчика Python. В мае 2020 года Барри Варшава переложил афоризмы на музыку. Список можно увидеть в консоли, если ввести следующую команду: Умышленная ирония, стоящая за Zen of Python, заключается в том, что сам this.py модуль нарушает почти все афоризмы. Модуль реализован в виде шифра ROT13. Как бы продолжая афоризмы из Дзена, Python иногда предлагает порассуждать на любовную тему: Что касается заявления love is not True or False; love is love, оно иронично, но не требует пояснений. Предпочитаете фигурные скобки в стиле C вместо отступов? Увы их никогда не будет: Если вы начнете копаться во внутренностях Python, можно наткнуться на предупреждение help для types.CodeType, которое буквально гласит что это не для слабонервных: «Not for the faint of heart». Первоапрельская шутка (4/01), PEP 401 заявляет, что Гвидо ван Россум уходит в отставку. Новый титул, данный ему, будет произноситься как «BDEVIL» (Benevolent Dictator Emeritus Vacationing Indefinitely from the Language – Доброжелательный диктатор, почетно отдыхающий от языка на неопределенный срок), а преемником Гвидо станет Барри Варшава, или, как его ласково называют, дядя Барри. Официальный титул дяди Барри – «FLUFL» (Friendly Language Uncle For Life – Дядя на всю жизнь): Гвидо написал оригинальную реализацию Python в 1989 году и после почти 20 лет руководства сообществом решил уйти в сторону как Доброжелательный диктатор на всю жизнь. Гвидо оставляет Python в надежных руках его нового лидера и его яркого сообщества, чтобы подготовиться к своей мечте всей жизни о восхождении на Эверест. После единодушного голосования Руководящего союза Python (не путать с Python Secret Underground, которого категорически не существует) на конференции PyCon 2009, был выбран преемник Гвидо: Барри Варшава, или как он с любовью известен, дядя Барри. Дядя Барри принимает следующие решения, чтобы продемонстрировать свое намерение вести сообщество так же ответственно и открыто, как и его предшественник, имя которого ускользает от него: Отголосок этой шутки можно по прежнему лицезреть в интерпретаторе: Хеш – это фиксированное целое число, идентифицирующее конкретную величину. Хеш бесконечности в Python равен 10⁵ x π. Интересно, что float(‘-inf’) в Python3 хэш равен «-10⁵ x π», а в Python 2 – «-10-x e». Учитывая, что создатель языка любит это шоу неудивительно, что в официальной документации явно сказано: «Ссылки на скетчи Monty Python в документации не только разрешены, но и приветствуются!». Метасинтаксические переменные в Python принимают имена spam и egg, а не более традиционно используемые foo и bar. Вот еще пример использования str.format(), явно отсылающий к фильму «Монти Пайтон и Священный Грааль»: Хотя это не совсем пасхалка, но некоторые из самых популярных математических функций определены в математическом модуле. К ним относятся тригонометрические функции, функции представления, логарифмические функции, функции преобразования углов и т. д. Кроме того, в этом модуле определены две математические константы. Еще одна хорошо известная математическая константа, определенная в математическом модуле, – это e. Оно называется числом Эйлера и является основанием натурального логарифма. Его значение – 2,718281828459045. «Hello, World!» часто используется для иллюстрации основного синтаксиса языка программирования. Это также часто первая программа для многих новичков. Сложно сделать это еще проще чем в Python: Разработчики Python скрыли модуль, который мог выполнять Hello World, просто импортировав этот модуль! Повторный импорт библиотеки не приводит к повторному появлению сообщения. Заключение Подводя итог можно сказать, что Python – это не только мощный и функциональный язык. Разработчики и сообщество вложили в него специфическое чувство юмора и много интересных изюминок. Если вы решили освоить его с нуля, вам поможет «Самоучитель для начинающих». В библиотеке программиста вы также найдете множество полезных материалов по Python для разного уровня и задач.Змеиные яйца
$ python3
Летающий змий
>>>import antigravity
Geohash
>>> help(antigravity.geohash)
Змеиный Дзен
>>> import this
s = """Gur Mra bs Clguba, ol Gvz Crgref Ornhgvshy vf orggre guna htyl. Rkcyvpvg vf orggre guna vzcyvpvg. Fvzcyr vf orggre guna pbzcyrk. Pbzcyrk vf orggre guna pbzcyvpngrq. Syng vf orggre guna arfgrq. Fcnefr vf orggre guna qrafr. Ernqnovyvgl pbhagf. Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf. Nygubhtu cenpgvpnyvgl orngf chevgl. Reebef fubhyq arire cnff fvyragyl. Hayrff rkcyvpvgyl fvyraprq. Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff. Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg. Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu. Abj vf orggre guna arire. Nygubhtu arire vf bsgra orggre guna *evtug* abj. Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn. Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn. Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!""" d = {} for c in (65, 97): for i in range(26): d[chr(i+c)] = chr((i+13) % 26 + c) print("".join([d.get(c, c) for c in s]))
Змеиная любовь
>>> import this ... >>> love = this >>> this is love True >>> love is True False >>> love is False False >>> love is not True or False True >>> love is not True or False; love is love # Love is complicated True True
Нет шансов для фигурных скобок
>>> from __future__ import braces File "<stdin>", line 1 SyntaxError: not a chance
types.CodeType – не для слабонервных
>>> import types >>> help(types.CodeType) ... Help on class code in module builtins: class code(object) | code(argcount, kwonlyargcount, nlocals, stacksize, flags, codestring, | constants, names, varnames, filename, name, firstlineno, | lnotab[, freevars[, cellvars]]) | | Create a code object. Not for the faint of heart. | | Methods defined here: | …
PEP 401 и FLUFL
>>> from __future__ import barry_as_FLUFL >>> 0 != 1 SyntaxError: with Barry as BDFL, use '<>' instead of '!=' >>> 0 <> 1 True >>> 1 <> 1 False
Хеш бесконечности
>>> hash (float ('inf')) 314159 >>> hash (float ('nan')) 0
Еще раз Монти Пайтон
>>> print 'We are the {} who say "{}!"'.format('knights', 'Ni') We are the knights who say "Ni!"
Математический модуль
>>> from math import pi >>> π = pi >>> area = π * r**2 >>> résumé = 'knows Python' >>> 'Python' in résumé True
>>> import math >>> math.e 2.718281828459045
HelloWorld
>>> import __hello__ Hello world!
- 5 views
- 0 Comment