字典、列表或集合末尾的额外逗号在 Python 中有什么特殊含义吗?
Does the extra comma at the end of a dictionary, list or set has any special meaning in Python?
我偶然注意到在 list、dictionary[=] 的末尾添加了一个额外的分隔符 comma 22=] 或 set 在语法上是正确的并且似乎没有向数据结构添加任何内容:
In [1]: d1 = {'a': 1, 'b': 2}
In [2]: d2 = {'c': 10, 'd': 20,}
In [3]: d1
Out[3]: {'a': 1, 'b': 2}
In [4]: d2
Out[4]: {'c': 10, 'd': 20}
它有什么特殊的含义或用法吗?
我发现的唯一一个是在初始化期间显式数据结构:
In [14]: r = (1)
In [15]: r
Out[15]: 1
In [16]: r = (1,)
In [17]: r
Out[17]: (1,)
它在列表或字典中没有特殊含义,但在使用源代码更改管理工具时很有用,请参见下文。
非空元组是通过在元素之间使用逗号定义的,括号是可选的,仅在逗号可能具有不同含义的上下文中才需要。
因为逗号定义元组,如果只有一个元素,则至少需要一个逗号:
>>> 1
1
>>> 1,
(1,)
>>> type((1,)) # need parens to distinguish comma from the argument separator
<type 'tuple'>
空元组使用空括号定义:
>>> type(())
<type 'tuple'>
尾随逗号有助于在添加新行时最大程度地减少更改的行数;向带有尾随逗号的字典添加附加行不会更改最后一个现有条目:
a_value = {
key1: value1,
key2: value2,
# inserting here doesn't require adding a comma
# to the preceding line.
}
对于多行的一致性很有用:
d1 = {
'a': 1,
'b': 2,
}
您可以在不更改逗号的情况下重新排列或添加行。它不会改变所表示的信息的任何内容。
您可以使用 dis
模块来验证两个对象的行为是否完全相同。
In [10]: import dis
In [11]: def make_dict():
return {"a": 1, "b": 2}
....:
In [12]: def make_dict_2():
return {"a": 1, "b": 2,}
....:
In [13]: dis.dis(make_dict)
2 0 BUILD_MAP 2
3 LOAD_CONST 1 (1)
6 LOAD_CONST 2 ('a')
9 STORE_MAP
10 LOAD_CONST 3 (2)
13 LOAD_CONST 4 ('b')
16 STORE_MAP
17 RETURN_VALUE
In [14]: dis.dis(make_dict_2)
2 0 BUILD_MAP 2
3 LOAD_CONST 1 (1)
6 LOAD_CONST 2 ('a')
9 STORE_MAP
10 LOAD_CONST 3 (2)
13 LOAD_CONST 4 ('b')
16 STORE_MAP
17 RETURN_VALUE
我偶然注意到在 list、dictionary[=] 的末尾添加了一个额外的分隔符 comma 22=] 或 set 在语法上是正确的并且似乎没有向数据结构添加任何内容:
In [1]: d1 = {'a': 1, 'b': 2}
In [2]: d2 = {'c': 10, 'd': 20,}
In [3]: d1
Out[3]: {'a': 1, 'b': 2}
In [4]: d2
Out[4]: {'c': 10, 'd': 20}
它有什么特殊的含义或用法吗?
我发现的唯一一个是在初始化期间显式数据结构:
In [14]: r = (1)
In [15]: r
Out[15]: 1
In [16]: r = (1,)
In [17]: r
Out[17]: (1,)
它在列表或字典中没有特殊含义,但在使用源代码更改管理工具时很有用,请参见下文。
非空元组是通过在元素之间使用逗号定义的,括号是可选的,仅在逗号可能具有不同含义的上下文中才需要。
因为逗号定义元组,如果只有一个元素,则至少需要一个逗号:
>>> 1
1
>>> 1,
(1,)
>>> type((1,)) # need parens to distinguish comma from the argument separator
<type 'tuple'>
空元组使用空括号定义:
>>> type(())
<type 'tuple'>
尾随逗号有助于在添加新行时最大程度地减少更改的行数;向带有尾随逗号的字典添加附加行不会更改最后一个现有条目:
a_value = {
key1: value1,
key2: value2,
# inserting here doesn't require adding a comma
# to the preceding line.
}
对于多行的一致性很有用:
d1 = {
'a': 1,
'b': 2,
}
您可以在不更改逗号的情况下重新排列或添加行。它不会改变所表示的信息的任何内容。
您可以使用 dis
模块来验证两个对象的行为是否完全相同。
In [10]: import dis
In [11]: def make_dict():
return {"a": 1, "b": 2}
....:
In [12]: def make_dict_2():
return {"a": 1, "b": 2,}
....:
In [13]: dis.dis(make_dict)
2 0 BUILD_MAP 2
3 LOAD_CONST 1 (1)
6 LOAD_CONST 2 ('a')
9 STORE_MAP
10 LOAD_CONST 3 (2)
13 LOAD_CONST 4 ('b')
16 STORE_MAP
17 RETURN_VALUE
In [14]: dis.dis(make_dict_2)
2 0 BUILD_MAP 2
3 LOAD_CONST 1 (1)
6 LOAD_CONST 2 ('a')
9 STORE_MAP
10 LOAD_CONST 3 (2)
13 LOAD_CONST 4 ('b')
16 STORE_MAP
17 RETURN_VALUE