为什么有时可以用 {} 替换 set()?

新手上路,请多包涵

在 PyCharm 中,当我写:

 return set([(sy + ady, sx + adx)])

它说 “函数调用可以用 set literal 替换” 所以它替换为:

 return {(sy + ady, sx + adx)}

这是为什么? Python 中的 A set() 与字典 {} 吗?

如果它想优化这个,为什么这个更有效?

原文由 Olivier Pons 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 661
2 个回答

Python 集和字典都可以使用大括号构造:

my_dict = {'a': 1, 'b': 2}

my_set = {1, 2, 3}

口译员(和人类读者)可以根据内容区分它们。但是,无法区分空集和空字典,因此在这种情况下,您需要使用 set() 来消除空集的歧义。

一个非常简单的测试表明文字构造更快(python3.5):

 >>> timeit.timeit('a = set([1, 2, 3])')
0.5449375328607857
>>> timeit.timeit('a = {1, 2, 3}')
0.20525191631168127

这个问题 涵盖了文字构造相对于内置函数的一些性能问题,尽管是针对列表和字典。总结似乎是字面结构需要解释器的工作较少。

原文由 snakecharmerb 发布,翻译遵循 CC BY-SA 3.0 许可协议

它是 set() 的替代语法

>>> a = {1, 2}
>>> b = set()
>>> b.add(1)
>>> b.add(2)
>>> b
set([1, 2])
>>> a
set([1, 2])
>>> a == b
True
>>> type(a) == type(b)
True

dict 语法不同。它由键值对组成。例如:

 my_obj = {1:None, 2:None}

原文由 DhruvPathak 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题