代码之家  ›  专栏  ›  技术社区  ›  Aaron Fischer

为什么python不允许连字符

  •  18
  • Aaron Fischer  · 技术社区  · 6 年前

    我一直在想,为什么不能在python中的函数名和变量名之间使用连字符呢?

    尝试过Lisp和Clojure等允许使用连字符的函数式编程语言。为什么蟒蛇不这样做。

    # This won't work -- SyntaxError
    def is-even(num):
        return num % 2
    
    # This will work
    def is_even(num):
        return num % 2
    

    我相信吉多先生一定是因为某些原因才这么做的。我在谷歌上搜索,但找不到答案。有人能帮我照一下吗?

    4 回复  |  直到 15 年前
        1
  •  40
  •   mipadi    15 年前

    因为连字符用作减法运算符。想象一下你 能够 有一个 is-even 函数,然后您得到如下代码:

    my_var = is-even(another_var)
    

    is-even(another_var) 对函数的调用 甚至 或者是减去函数的结果 even 从名为 is ?

    Lisp方言没有这个问题,因为它们使用前缀表示法。例如,两者之间有明显的区别

    (is-even 4)
    

    (- is (even 4))
    

    口齿不清的

        2
  •  9
  •   JPvdMerwe    15 年前

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

    a-b = 10
    a = 1
    b = 1
    
    c = a-b
    

    答案是什么?0还是10?

        3
  •  7
  •   jldupont    15 年前

    因为它会使解析器更加复杂。对于程序员来说,这也会令人困惑。

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

    还要注意, - 是python中的减法运算符,因此会使解析更加复杂。

        4
  •  0
  •   High Performance Mark    15 年前
    is-even(num)
    

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

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

    作记号