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

在PyCharm中,当我写道:

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

它说“函数调用可以用set literal替换”,所以它用下面的代替:

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

这是为什么? Python中的set()与字典不一样{}

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


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

这个问题涵盖了一些关于内建函数的字面结构的表现问题,尽管列表和字典都是如此。 这个总结似乎是,文字构造需要解释者的更少的工作。


它是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}

set([iterable])是从可选迭代iterable创建一个集合的构造函数。 {}是创建set / dict对象文字。 那么创建什么取决于你如何使用它。

In [414]: x = {}

In [415]: type(x)
Out[415]: dict

In [416]: x = {1}

In [417]: type(x)
Out[417]: set

In [418]: x = {1: "hello"}

In [419]: type(x)
Out[419]: dict
链接地址: http://www.djcxy.com/p/31693.html

上一篇: Why is it possible to replace sometimes set() with {}?

下一篇: [] and {} vs list() and dict(), which is better?