Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么可以';在遍历列表时,我们是否在for循环周围使用括号?_Python_For Loop - Fatal编程技术网

Python 为什么可以';在遍历列表时,我们是否在for循环周围使用括号?

Python 为什么可以';在遍历列表时,我们是否在for循环周围使用括号?,python,for-loop,Python,For Loop,根据,循环的语法为: for_stmt:'testlist'中的'exprlist':'[TYPE_COMMENT]suite['else':'suite] 它是关键字的、表达式列表、关键字中的和测试列表。没有规定testlist中的exprlist要用括号括起来 要允许使用括号,则需要类似以下内容,其中expr可能是一个括号表达式: for stmt:'for'expr':'[TYPE_COMMENT]suite['else':'suite] 但这不是语法 但是口译员不应该忽略括号吗?比如

根据,循环的
语法为:

for_stmt:'testlist'中的'exprlist':'[TYPE_COMMENT]suite['else':'suite]
它是
关键字的
、表达式列表、关键字中的
和测试列表。没有规定testlist中的exprlist要用括号括起来

要允许使用括号,则需要类似以下内容,其中expr可能是一个括号表达式:

for stmt:'for'expr':'[TYPE_COMMENT]suite['else':'suite]
但这不是语法

但是口译员不应该忽略括号吗?比如
(a+b)/2
((a)+(b))/2
意思是一样的吗

只有在预定义的位置才允许使用括号。他们不允许去任何地方。你不能写
(a+b/2
a+b(/2)
,对吗

在语法中,括号来自此产品:

原子:(“(“[yield_expr | testlist_comp]”)| “[”[testlist_comp]”| “{'[dictorsetmaker]'}”| 名称|编号|字符串+|'…'|'无'|'真'|'假')
expr可以是很多东西。最基本、不可分割的表达式类型是原子:名称、数字、字符串等等(最后一行)。或另一个用括号括起来的表达式(第一行)

任何允许表达式的地方,也允许该表达式的括号版本

“测试列表”中的“exprlist”的
exprlist可以用括号括起来。测试列表可以用括号括起来。如果你检查语法,这两种结果最终都会导致原子产生。允许使用以下括号:

a =["mary","had", "a", "little", "lamb"]   
print(len(a))   
for (i in a):  **# this part says invalid syntax**   
    print(i)   


a =["mary","had", "a", "little", "lamb"]   
print(len(a))   
for i in a:   #this works just fine   
    print(i)
for (i) in (a):
但不能在其他任何地方自由插入括号。所有这些都是不允许的:

a =["mary","had", "a", "little", "lamb"]   
print(len(a))   
for (i in a):  **# this part says invalid syntax**   
    print(i)   


a =["mary","had", "a", "little", "lamb"]   
print(len(a))   
for i in a:   #this works just fine   
    print(i)
for (i) in (a):

a
中独立的表达式
i将计算为布尔值:序列
a
中的
i

当你把它放在括号里时,你告诉解释器先计算出它的值,然后再看周围的东西,所以这就像写:

对于False:

除了比这更糟糕,因为没有定义
i

@SuryaTej:即使它看起来像一个函数调用,也不必是函数调用。C#具有这种语法,并且仍然可以区分for循环和函数调用。这是lexerb的任务,但是解释器不应该忽略括号吗?就像(a+b)/2和((a)+(b))/2意味着同一件事?@Tanuj不,括号从来没有被解释器真正忽略过,它们在不同的上下文中可能意味着不同的事情。在这里,设计者决定了for循环的语法,其中不允许使用括号