Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
>>和/或使用python语言_Python_Operator Keyword - Fatal编程技术网

>>和/或使用python语言

>>和/或使用python语言,python,operator-keyword,Python,Operator Keyword,在python语言中,“>>”运算符和“/”运算符在执行时间方面有什么区别吗?当我们要将任何整数除以“2”的倍数时,为什么?>只对整数有效。/的行为取决于您使用的是2.x还是3.x,或者是否已从_ufuture__;导入除法。因此,重要的区别与速度无关。默认Python实现的开销非常大,如果您关心这样的事情,它就是错误的语言。很有启发性 事实上,>>的速度将比/。但这并不是因为除法的成本,而是因为计算出是要除法浮点还是除法整数的开销!如果改为除以//则假定为int,其速度与>>…相同是的,有:

在python语言中,“>>”运算符和“/”运算符在执行时间方面有什么区别吗?当我们要将任何整数除以“2”的倍数时,为什么?

>只对整数有效。/的行为取决于您使用的是2.x还是3.x,或者是否已从_ufuture__;导入除法。因此,重要的区别与速度无关。

默认Python实现的开销非常大,如果您关心这样的事情,它就是错误的语言。很有启发性

事实上,>>的速度将比/。但这并不是因为除法的成本,而是因为计算出是要除法浮点还是除法整数的开销!如果改为除以//则假定为int,其速度与>>…

相同是的,有:

>>> timeit.timeit('a = 32; a / 2')
0.32588499376317426
>>> timeit.timeit('a = 32; a >> 1')
0.27532270162828
原因似乎很明显——对位的操作速度更快


无论如何,这种差异并不是使用>>而不是/进行除法的原因。

好吧,几乎可以肯定的是,在事先不知道类型的情况下,位移位更快。但我们可能会变得聪明。让我们检查一下:

In [11]: 2**20-37
Out[11]: 1048539

In [12]: timeit 1048539 >> 14
10000000 loops, best of 3: 29 ns per loop

In [13]: 2**14
Out[13]: 16384

In [14]: timeit 1048539 /16384
10000000 loops, best of 3: 72.2 ns per loop

In [15]: timeit 1048539 //16384
10000000 loops, best of 3: 29.1 ns per loop
注意最后一种情况:如果我们专门研究带//的整数,它几乎完全相同


特别是在Python中,类型事先不知道,否则很难优化这种类型。另一方面,这意味着/也将使用非整数-这可能是一个错误或特性,取决于您实际正在做的事情。

如果它重要,提示:不重要,您最好编写C。如果您关心差异,请不要使用Python。另外,这可能是CPU特有的。实际上,我刚刚解决了一个spoj问题,其中执行时间有所不同,所以我很想知道它与CI中的功能相同。不认为字节操作更快解释了这一切。尝试比较a=32;a*2和a=32;a@DSM我无法重新编制您的结果-左移比乘法快。对我来说,我得到~0.081 vs~0.096 2.7.2。很明显,操作执行时间本身受到足够的噪声编译器选项的影响?月相?这种笼统的语句将是困难的。但是根据下面的分析,“//”比Python2.7中的“>>>”要慢;a//2'0.3532679080963135>>timeit.timeit'a=100000000000000;a> >1'0.2281970977783203