为什么有时可以用{}替换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