这就是我的意思:
> python -m timeit "set().difference(xrange(0,10))"
1000000 loops, best of 3: 0.624 usec per loop
> python -m timeit "set().difference(xrange(0,10**4))"
10000 loops, best of 3: 170 usec per loop
显然,Python会遍历整个参数,即使在事先已知结果为空集的情况下。这样做有什么好处吗?此代码在Python 2.7.6中运行。
即使对于非空集合,如果您发现在迭代过程中已经删除了第一个集合的所有元素,立即停止迭代也是有意义的。
set.difference
函数的参数可以是任意可迭代对象,而不仅仅是集合。在迭代某些对象时可能会产生副作用,保证对于所有情况下函数具有相同的行为,而不是只有一种情况下参数被“未使用”,可能更重要。 - chepner