Why is it possible to replace sometimes set() with {}?
在Pycharm中,当我写:
1 | return set([(sy + ady, sx + adx)]) |
它说"函数调用可以替换为set literal",因此它将其替换为:
1 | return {(sy + ady, sx + adx)} |
为什么会这样?python中的
如果它想优化这个,为什么这个更有效?
python集和字典都可以使用大括号构造:
口译员(和人类读者)可以根据他们的内容来区分他们。但是,不能区分空集和空dict,因此在这种情况下,需要使用
一个非常简单的测试表明文字结构更快(python3.5):
1 2 3 4 | >>> timeit.timeit('a = set([1, 2, 3])') 0.5449375328607857 >>> timeit.timeit('a = {1, 2, 3}') 0.20525191631168127 |
这个问题涵盖了在内置函数上执行文本构造的一些问题,尽管是针对列表和dict。总而言之,字面结构对解释器的工作要求较低。
它是
1 2 3 4 5 6 7 8 9 10 11 12 | >>> 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 |
1 | my_obj = {1:None, 2:None} |
Another example how
1 2 3 4 5 6 7 | In: f = 'FH' In: set(f) Out: {'F', 'H'} In: {f} Out: {'FH'} |
In [415]: type(x)
Out[415]: dict
In [416]: x = {1}
In [417]: type(x)
Out[417]: set
In [418]: x = {1:"hello