我们真的需要'def'吗? (python语法改进提供)

时间:2014-07-10 09:56:42

标签: python

JavaScript var x = 10与Python中的x = 10相同。有点简单。但在Python中我们为什么要使用

def f(x): x+1
f(0)           # => 1

而不是

f(x): x+1
f(0)           # => 1

第二个不是更好吗?无论如何,受到The Zen of Python的启发,我的问题是:

  1. 可能使第二种模式无法运作的(潜在)障碍是什么?你能举一些代码示例吗?
  2. 如果第二个模式没有问题,如果有人通知他们,Python设计师是否可以更改它?

3 个答案:

答案 0 :(得分:2)

Python的语法并不是试图成为计算机解析明确的最小语法。它试图成为人们可读的语法。函数定义是程序中的重要事件。它值得一个关键词。

你说,"初学者眼睛尽可能多地寻求简洁和简洁。"我不同意初学者希望事情尽可能短。他们希望事情尽可能可读。这需要平衡。

另一个例子,我们可能会像CoffeeScript那样将冒号放在行的末尾。但是冒号是缩进子句期望的一个很好的指标,并且是纯粹极简主义(CoffeeScript)和过度标点符号(C ++)之间的一个很好的折衷。

答案 1 :(得分:0)

期待很多无聊的反驳。人们不喜欢改变。实际情况是,您建议的更改是完全有效的,如果Python最初是以这种方式设计的,那么现在没有人会质疑它。

我也讨厌def。我认为这是丑陋和多余的。冒号和缩进足以消除函数调用中的函数定义以及建立可读性。

此外,class关键字将其与类区分开来。 class要求关键字和函数不要因为函数比类更常见,这也是有意义的。

也就是说,您的帖子更适合https://softwareengineering.stackexchange.com/而不是https://stackoverflow.com/

答案 2 :(得分:0)

我同意用户29263623 def增加了一点可读性。

对于变量定义/赋值,var值得删除,因为它看起来比函数定义更频繁,=是定义/赋值(自然和短)的良好语法。

=不同,:还有一些其他用法。我可以想到一些情况,删除def会导致一些混乱(可能主要是python解释器):

  1. a_list_or_tuple[f(x): x]
  2. if f(x): blabla
  3. 当然我们可以创建规则来定义这两种情况不是函数定义。但对我来说,这是不必要的,只需使用def就足够清楚和简单了。