Python Set Literals

简介:

现有3种方式创建set()

复制代码
>>> def f():
...     return set([1, 2, 3])
... 
>>> def h():
...     return set((1, 2, 3))
... 
>>> def g():  #set Literals
...     return {1, 2, 3}

>>> f()
set([1, 2, 3])
>>> h()
set([1, 2, 3])
>>> g()
set([1, 2, 3])
复制代码

效率对比

复制代码
>>> import timeit
>>> min(timeit.repeat(f))
0.675529956817627
>>> min(timeit.repeat(h))
0.5531120300292969
>>> min(timeit.repeat(g))
0.35515809059143066
复制代码

对比结果

可见set Literals完胜

原理

为了了解其中的原因,分析下生成set()的原理

复制代码
>>> dis.dis(f)
  2           0 LOAD_GLOBAL              0 (set)
              3 LOAD_CONST               1 (1)
              6 LOAD_CONST               2 (2)
              9 LOAD_CONST               3 (3)
             12 BUILD_LIST               3
             15 CALL_FUNCTION            1
             18 RETURN_VALUE        
>>> dis.dis(h)
  2           0 LOAD_GLOBAL              0 (set)
              3 LOAD_CONST               4 ((1, 2, 3))
              6 CALL_FUNCTION            1
              9 RETURN_VALUE        
>>> dis.dis(g)
  2           0 LOAD_CONST               1 (1)
              3 LOAD_CONST               2 (2)
              6 LOAD_CONST               3 (3)
              9 BUILD_SET                3
             12 RETURN_VALUE 
复制代码

分析

f()需要载入全局函数set,把三个元素放入栈中,然后调用set()函数,就生成了set()

h()也需要载入全局函数set,不是把三个元素载入栈,而是把一个元组常量放入栈,然后调用set()函数,就生成了set()

g()是直接把三个元素放入栈,然后就生成了set()

总结

尽管这里生成set()的方式对性能的提升很小,set literals不用花费时间调用函数处理中间数据,并且这种写法是非常漂亮的,所以建议用set literals的方式

 





本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/6139573.html,如需转载请自行联系原作者

相关文章
|
Python
Python中的setdefault,set和default
setdefault,set 是设置,default 是默认
366 0
Python中的setdefault,set和default
|
4月前
|
算法 Python
Python高级数据结构——并查集(Disjoint Set)
Python高级数据结构——并查集(Disjoint Set)
110 2
|
4月前
|
Shell Python
Python(二十一)python集合set
集合(set)是一个无序的不重复元素序列。 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 集合是没有value的字典 一:创建集合 1:创建一个集合 ini 复制代码 # 创建集合 set_one = {1, 2, '33', 4, 5} print(set_one) 输出: {'33', 1, 2, 4, 5} 2:创建一个空集合 scss 复制代码 # 创建一个空集合 set_kong = set() print(set_kong) print(type(set_kong))
31 0
|
8月前
|
索引 Python
Python 集合set详解(超详细)
Python 集合set详解(超详细)
113 0
|
9月前
|
Python 容器
python中dict的详细用法以及set集合使用
python中dict的详细用法以及set集合使用
139 0
|
9月前
|
存储 索引 Python
Python - 数据容器set(集合)
Python - 数据容器set(集合)
|
11月前
|
索引 Python
Python集合 (set) 的增删改查及 copy()方法
集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。
86 0
|
11月前
|
Python
用Python中的Set集合证明每个人都是独一无二的!
用Python中的Set集合证明每个人都是独一无二的!
|
Python
Python描述符(__get__和__set__和__delete__)
Python描述符(__get__和__set__和__delete__)
89 0
|
索引 Python 容器
上手Python之set(集合)
上手Python之set(集合)
上手Python之set(集合)