Подтвердить что ты не робот

Почему 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, но не смог найти ответ. Кто-нибудь может пролить свет на это?

4b9b3361

Ответ 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, разбор может быть сложным.

Марк