2010-01-14 44 views
15

我一直想知道为什么我们不能在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搜索,但无法找到答案。任何人都可以在这个问题上投下一些光

+0

发生语法错误的原因是'is'是关键字。在'def mightbe-even(num)'中,语法错误是因为连字符。 – balpha 2010-01-14 13:36:59

+0

我一直想知道为什么ASCII有“ - ”和“_”。当你想知道“ - ”的用法时,你是否也想知道“_”的用法?事实上,我有很多标点符号问题与这个问题一样重要。为什么“#”和“♯”不同?你也可以想知道吗?我一直觉得很奇怪,我们不能用“♯”发表评论。 – 2010-01-14 13:51:50

+0

(@aatifh,请参阅http://meta.stackexchange.com/questions/35582/inaccurate-revision-information - 您是否将标记从'pyhon'更改为'python'?并且可能还删除了一个尾部反引号标题?) – Arjan 2010-01-14 16:03:45

回答

35

由于连字符被用作减法运算符。试想一下,你可以is-even功能,然后你有这样的代码:

my_var = is-even(another_var) 

is-even(another_var)的功能is-even一个电话,或者是减函数even从一个名为is变量的结果?

Lisp方言没有这个问题,因为它们使用前缀符号。例如,有一个在的Lisp

之间
(is-even 4) 

(- is (even 4)) 

明显的区别。

+8

关于Lisp,前缀方面是不相关的;不同之处在于“ - ”并不一定是一个单独的标记;字母和“普通”标点符号(例如不是“)”的任何组合都可以组成单个标记。中缀语言可以很好地适用于这些规则;那么“is-even(another_var)'”将是一个函数调用,“'even-even(another_var)”将是减法,就像在Lisp中一样(是 - 甚至是4)'是一个不同的s表达式从'(是 - 甚至4)'。 – 2010-01-14 13:43:55

+0

Lisp没有这个问题,因为“ - ”只是一个字符。 – 2010-01-14 13:49:30

+0

我可以看到' - '应该用于减号运算符,并且中缀符号对可读性有好处(对于那些没有使用前缀符号计算器长大的人)。然而,是否有一个令人信服的理由让减号和其他操作符周围没有空格?在Python中看起来空白已经很重要,为什么不强制在运算符周围使用空格来允许在名称中使用连字符,在我看来,这种方式比under_score和camelWTFCase更易读,更易于输入约定,I不喜欢等量。 – 2012-12-19 12:44:15

7

因为它会使解析器变得更加复杂。这对程序员来说也会造成混乱。

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

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

0
is-even(num) 

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

正如@jdupont所说,解析可能会非常棘手。

马克

+0

'is'是一个关键字,它不能有一个值:) – balpha 2010-01-14 13:35:23

+1

解析可能会非常棘手。从关键字中减去值可能会导致解析器投诉。 – 2010-01-14 13:52:33

9

因为Python使用中缀表示法来表示计算和一个连字符和一个减号具有完全相同的ASCII码。你可以有不明确的情况,如:

a-b = 10 
a = 1 
b = 1 

c = a-b 

答案是? 0或10?

+0

我拿到了这个。它看起来很直。任何具有中缀记号的语言都不能使用连字符。连字符只允许使用支持S表达式的语言。 :) – aatifh 2010-01-14 13:43:32

+1

那么,一个编程语言,其自己的字符集是Unicode(他们来了)可以很容易区分连字符和负号。问题是太多的语言在字符集中不能区分连字符和减号。这是字符集的贫困,而不是表达的贫困。 – 2010-01-14 13:55:27

+0

你是对的,虽然如果有人利用它并将其用于他们的标识符,那么这种能力会很讨厌。 – JPvdMerwe 2010-01-14 14:07:57