为何Python不允许在函数和变量名中使用连字符?

30 投票
5 回答
35591 浏览
提问于 2025-04-15 18:01

我一直在想,为什么在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

我相信Guido大叔肯定是有他的理由的。我在网上查了查,但没找到答案。有没有人能帮我解释一下这个问题?

5 个回答

8

这样做会让解析器变得更加复杂,对程序员来说也会很困惑。

想想看,假设有个函数叫 def is-even(num):,如果 is 是一个全局变量,那会发生什么呢?

另外要注意,- 在Python中是减法运算符,这样的话会让解析过程变得更加复杂。

15

因为Python使用的是中缀表示法来进行计算,而连字符和减号的ASCII码是完全相同的。所以在某些情况下,可能会出现让人困惑的情况,比如:

a-b = 10
a = 1
b = 1

c = a-b

那么答案是什么呢?是0还是10?

59

因为连字符被用作减法运算符。想象一下,如果你有一个叫 is-even 的函数,然后你写了这样的代码:

my_var = is-even(another_var)

那么 is-even(another_var) 是在调用 is-even 这个函数,还是在从一个叫 is 的变量中减去 even 函数的结果呢?

而 Lisp 语言就没有这个问题,因为它们使用的是前缀表示法。比如,在 Lisp 中,

(is-even 4)

(- is (even 4))

之间的区别是非常明显的。

撰写回答