python-3.x - 为什么嵌套列表嵌套更深,行尾只有一个逗号
问题描述
我在 python 3.9.1 中遇到了一个奇怪的语法问题(可能是其他问题),我在文档或此处找不到原因。我只是好奇为什么会这样。
我有一个返回列表的函数:
def func():
return 1,2,3,4
我正在创建一个字典键以供以后使用,并且我希望该值是一个嵌套列表:
dict = {key1:[func()], key2: [func(), func()]}
计划是将值传递给另一个函数,该函数将遍历列表。最终函数可以工作在外部列表中的任何内容,0、1、许多。
在我的代码中,我必须在调用工作函数之前更新密钥。
dict[key1] = [func()], #<== final comma
这是我的问题的价值分配中的最后一个逗号。我已经复制了该键的字典构建语句部分,并留在了逗号中。它在列表中的列表中创建了列表。删除逗号得到所需的结果列表列表。我只是找不到任何关于为什么会发生这种行为的文档。谁能解释一下?
解决方案
尾随逗号是 1 元组的语法。这通常在括号内使用:
threetuple = (1, 2, 3)
twotuple = (1, 2)
onetuple = (1,)
literal = (1) # evaluates to the integer 1, not to a tuple
但是python的语法允许它在不会引起歧义的任何块中使用,包括括号之外:
threetuple = 1, 2, 3
twotuple = 1, 2
onetuple = 1,
literal = 1
这就是发生在你身上的事情——当你这样做时
dict[key1] = [func()],
您正在分配一个单元组,其中包含一个单元素列表,其中包含func()
.
将尾随逗号放在方括号内,你会没事的:
dict[key1] = [func(),]
这是标准列表语法,并且允许任何长度的列表或元组 - 它仅在您编写单元组文字时才需要,因为否则 python 无法知道您的意思是单元组。
推荐阅读
- react-native - 为什么在使用 React Native Navigation Drawer 时出现组件异常
- sql - SQLite 子查询和内连接
- flutter - 在 dart 中设置和访问类变量没有按预期工作
- flutter - 如何使用颤振字体真棒图标?
- azure - 我们如何控制身份验证方案中的“SignUpSignInPolicyId”
- ffmpeg - ffmpeg 创建 mpeg-dash 块文件太慢导致 404 错误
- javascript - 我可以让我的不和谐机器人基于网站发送消息吗?
- reactjs - react redux中的删除操作不起作用
- postgresql - Postgres SERIALIZABLE Snapshot Isolation 出现意外的枢轴错误
- java - 从另一个类调用静态方法而不在 Java 中创建对象