Почему python не разрешает дефисы
Я всегда задавался вопросом, почему мы не можем использовать дефис между именами функций и именами переменных в python
Попробовав языки функционального программирования, такие как Lisp и Clojure, где разрешены дефисы. Почему python этого не делает.
# This won't work -- SyntaxError
def is-even(num):
return num % 2
# This will work
def is_even(num):
return num % 2
Я уверен, что сэр Гвидо, должно быть, сделал это по некоторым причинам. Я googled, но не смог найти ответ. Кто-нибудь может пролить свет на это?
Ответы
Ответ 1
Потому что дефис используется как оператор вычитания. Представьте, что у вас могла бы быть функция is-even
, а затем у вас был такой код:
my_var = is-even(another_var)
Является ли is-even(another_var)
вызовом функции is-even
или вычитает результат функции even
из переменной с именем is
?
Lisp На диалектах этой проблемы нет, так как они используют префиксную нотацию. Например, существует четкая разница между
(is-even 4)
и
(- is (even 4))
в Lisps.
Ответ 2
Поскольку Python использует нотацию infix для представления вычислений и дефис, а минус имеет тот же самый ascii-код. У вас могут быть двусмысленные случаи, например:
a-b = 10
a = 1
b = 1
c = a-b
Каков ответ? 0 или 10?
Ответ 3
Потому что это сделает анализатор еще более сложным. Это тоже смущает программистов.
Рассмотрим def is-even(num):
: теперь, если is
является глобальной переменной, что происходит?
Также обратите внимание, что -
является оператором вычитания в Python, следовательно, еще больше усложнит синтаксический анализ.
Ответ 4
is-even(num)
содержит дефис? Я думал, что это вычитание значения, возвращаемого функцией, даже с аргументом num из значения is.
Как говорит @jdont, разбор может быть сложным.
Марк