Python追求的是一行代码和自然语言类似,而括弧不属于自然语言的要素
嗯 语法解析器就是这么解析的呗
语法的设计是和创始人的口味有关的, 如果你不用括号, 你用 号, 只要你会改语法解析器, 也行
除了 @无与童比 所说:“Python 的 for 语法与创始人口味有关,语法解析器就是这么解析的”使用 : 和缩进来进行语法分析; @毒舌Ken 所说:这种口味就是:"追求的是一行代码和自然语言类似,而括弧不属于自然语言的要素"以外,其实还和它想要表达的语义有关。
我延伸一下:C 语言的 for 循环需要初始值 i 、循环条件以及变化 i,这三个条件可以让我们在循环过程中去变化 i , 拥有较强的控制力。而 Python 中, for i in range(x) 的语义仅仅是 对可迭代对象中的每个元素,执行 for 语句块内的操作 ,并不能让我们去变化 i 。这就是 for i in range(x) 所表达的语义(保持原有顺序的迭代),如果你使用 () 括起来,反而破坏了它本来要表达的含义,不易理解。
综上:Python 的 for 和 C 的压根就不是一个东西,也和 Java 的 for 注定不同。至于 R 语言的 for,emmm... 这个我编不出来了
其它语言的带括号 for 循环,主要是C语言三段式写法的遗毒。
Python 没有for三段式写法,for的用途不完全相同,而且Python还有for-else这种别人没有的设计。
我写过一篇文章来辨析: https:// mp.weixin.qq.com/s/OypP wnJ2vX2vJtZRkVa-Ug
因为Python3 中 ,print 是函数,函数都是需要加括号调用函数。
for 是循环语句,在 Python 中,不需要括号。
请看文档
你中了C风格语言的毒吧……
不带圆括号的语言多了去了,那不是个必须得要素,只要编译器能够正确识别语义就行了。
C语言及其衍生的语言要求if和for等语句带圆括号的根本原因是因为这类语言不强制要求代码换行。除了使用分号分割语句边界外,自然也需要使用特定的符号标记带有条件的语句。
for(i in range(10))这个写的不对,是 for i in range(10) ,Python诞生于1991年,而Java于R诞生于995年!
要问为什么这样设计,那就要追溯到Python语言的诞生了!
龟叔早期接触并使用过诸如Pascal、C、 Fortran等语言。这些语言的基本设计原则是让机器能更快运行,因为早期个人电脑配置极低内存可能就一百多kb,所以早期语言很难能实现什么内存管理、垃圾自动回收、面向对象等,那会让你的电脑直接卡死! 但是到了上世纪90年代,计算机得到了快速的发展,硬件的性能越来越好(所以在90年代大量的面向对象语言被开发:Python、Visual Basic、Ruby、Java、JavaScript、PHP),所以Guido希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻松而简洁的编程。
ABC语言让龟叔看到希望。ABC是由荷兰的数学和计算机研究所开发的。20世纪80年代中旬Guido在该研究所工作,并参与到ABC语言的开发。ABC语言以教学为目的。ABC语言希望让语言变得容易阅读,容易使用,容易记忆,容易学习,并以此来激发人们学习编程的兴趣。
如下面是一段来自Wikipedia的ABC程序,这个程序用于统计文本中出现的词的总数:
上面这段代码中它的FOR循环也是没有{}的!
写成括号不代表是函数,先熟悉一下其他语言的语法再来妄加评论吧
因为 Python 的语法非常接近自然语言。
比如题主提到的 for i in range(10) ,是不是跟 这种表述非常类似?
请自行安装Bython:
没有括号才能展现出缩进的美丽
python 崇尚简洁实用,既然没有括号 python 解释器也能正确解析语法为什么还要括号呢?
总之,Python想要把程序变得简洁一些。
Python中for后面没有括号并没有什么二义性,不会造成困扰,所以加括号不见得那么有必要。
for如果做成函数,内部逻辑的实现仍要要靠一堆一堆的参数去实现,不觉得比关键字效率更高,也没有特殊的意义。
这样看来,如果加个括号,那就是Python作者的喜好了。
关于括号,可以看看另一门语言Lisp,用过Emacs的人相信都多少有点印象,配置文件里面有多少括号要修改,真的有必要有那么多括号吗?也不见得,不过从设计风格一致性上来说,Lisp还是拥有那么多括号比较好。
设计哲学不一样吧,这都是人造出来的语言
龟叔拍脑袋决定的呗,还有,Python的for和Java的for不太一样。