为何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
我相信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))
之间的区别是非常明显的。