python - 为什么在遍历列表时不能在 for 循环周围使用括号?
问题描述
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)
解决方案
根据Python 语法,for
循环的语法是:
for_stmt: 'for' exprlist 'in' testlist ':' [TYPE_COMMENT] suite ['else' ':' suite]
它是for
关键字、表达式列表、in
关键字和测试列表。没有规定exprlist 'in' testlist
用括号括起来。
对于允许使用括号,它需要是这样的,其中expr是一个可能带括号的表达式:
for_stmt: 'for' expr ':' [TYPE_COMMENT] suite ['else' ':' suite]
但这不是语法。
但是解释器不应该忽略括号吗?喜欢
(a+b)/2
和((a)+(b))/2
意思一样吗?
括号只允许在预定义的位置。他们在任何地方都不允许。你不会写(a+)b/2
or a+b(/2)
,对吧?
在语法中,括号来自这个产生式:
atom: ('(' [yield_expr|testlist_comp] ')' |
'[' [testlist_comp] ']' |
'{' [dictorsetmaker] '}' |
NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False')
一个expr可以是很多东西。expr最基本、不可分割的类型是原子:名称、数字、字符串等(最后一行)。或者用括号括起来的另一个表达式(第一行)。
在任何允许使用表达式的地方,也允许使用该表达式的括号版本。
'for' exprlist 'in' testlist ':'
exprlist可以用括号括起来。测试列表可以用括号括起来。如果你检查语法,这两个产生最终都会导致原子产生。允许使用这些括号:
for (i) in (a):
但是您不能在其他任何地方随意插入括号。这些都不允许:
for (i in a):
for i (in a):
(for) i in a:
(for i in) a:
推荐阅读
- javascript - Mongoose connectio occured MongoNetworkError: connection 0 to cluster0-shard-00-01-utzss.mongodb.net:27017 closed error
- core-audio - Core Audio MIDI Synth AU & MusicPlayer - Cannot be pulled by AudioUnitRender programmatically
- scala - Why the code is not producing the output as it is supposed to be in the logic implemented?
- firebase - Flutter Retrieve Data from Firebase
- opencv - opencv resize window for a live cam
- javascript - please tell me how to write code for chrome extension to be in full screen
- sql - 如何创建存储过程以在同一 SQL 服务器中跨数据库创建视图?
- r - 从列中计算变量的多个类别并通过创建新列来报告它们
- timestamp - 将传入的时区 {IST/PST/GMT 等..} TS 转换为 teradata 中的 CST 时区 TS?
- jquery - 具有活动/删除类的函数 setInterval next()