为什么python不允许使用连字符

时间:2010-01-14 13:27:45

标签: 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

我确信圭多爵士一定是因为某些原因而这样做了。我用Google搜索但无法找到答案。任何人都可以对此有所了解吗?

5 个答案:

答案 0 :(得分:41)

因为连字符用作减法运算符。想象一下,你可以拥有is-even函数,然后你有这样的代码:

my_var = is-even(another_var)

is-even(another_var)调用函数is-even,还是从名为even的变量中减去函数is的结果?

Lisp方言没有这个问题,因为它们使用前缀表示法。例如,

之间存在明显差异
(is-even 4)

(- is (even 4))

在Lisps中。

答案 1 :(得分:9)

因为Python使用中缀表示法来表示计算,连字符和减号具有完全相同的ascii代码。您可以有不明确的案例,例如:

a-b = 10
a = 1
b = 1

c = a-b

答案是什么? 0或10?

答案 2 :(得分:7)

因为它会使解析器更复杂。程序员也会感到困惑。

考虑def is-even(num)::现在,如果is是全局变量,会发生什么?

另请注意,-是Python中的减法运算符,因此会进一步使解析复杂化。

答案 3 :(得分:0)

is-even(num)

包含连字符?我认为这是函数返回的值的减法,即使参数num是来自is。

正如@jdupont所说,解析可能很棘手。

标记

答案 4 :(得分:0)

奇怪的是,使用 setattr() 可以使用带连字符的类变量名称,而不是您想要的。下面是一个例子:

class testclass:
    pass

x = testclass()
setattr(x, "is-even", True)
getattr(x, "is-even")
True

这仍然失败:

x.is-even
File "<stdin>", line 1
  x.is-even
     ^
SyntaxError: invalid syntax