В настоящее время единственным способом, которым можно добавить функции в Python, является использование PEP (Python Enhancement Proposal). Это может быть медленным и не поможет вам в тех случаях, когда вы хотите добавить к языку функцию, полезную только для вашего варианта использования.
Например, есть PEP для добавления цикла do-while . Это, вероятно, будет добавлено в Python, но PEP был создан в 2003 году. Сегодня я хотел бы написать циклы do-while
, и я мог бы сделать это, если бы в Python были макросы.
Аналогично, был PEP, чтобы добавить помеченный разрыв и продолжить , но это было отклонено. Если помеченные операторы break сделают мой код более понятным, я могу реализовать их с помощью макроса.
PEPs в стороне, я также хотел бы макрос unless
. Вместо того чтобы писать:
if not is_superman():
dodge_bullet()
Я мог бы написать:
unless is_superman():
dodge_bullet()
Я бы хотел макрос case
(часто называемый cond
в Лиспе). Вместо того чтобы писать:
if x == FOO:
do_stuff_with_foos()
elif x == BAR:
do_stuff_with_bars()
elif x == BAZ:
do_stuff_with_bazs()
Я мог бы написать:
switch x:
case FOO:
do_stuff_with_foos()
case BAR:
do_stuff_with_bars()
case BAZ:
do_stuff_with_bazs()
Это было бы просто реализовать в виде макросов. Более сложные полезные макросы будут включать:
- Интерполяция строк в стиле Ruby, например
"hello there {user}"
(вероятно, лучше всего реализовано как макрос для чтения)
- Сопоставление с образцом
В настоящее время это только функции на других языках. С помощью макросов я мог бы добавить их в Python. Я мог бы даже написать PEP, которые включали пример реализации. (Некоторые PEP уже делают это, но они вынуждены изменить источник C самого интерпретатора.)