What is the reason for having '//' in Python?
本问题已经有最佳答案,请猛点这里访问。
我在别人的密码里看到了:
1 | y = img_index // num_images |
其中,
当我在ipython中与
在python 3中,他们让
在python 2.x中:
1 2 3 4 5 6 7 | >>> 10/3 3 >>> # to get a floating point number from integer division: >>> 10.0/3 3.3333333333333335 >>> float(10)/3 3.3333333333333335 |
在python 3中:
1 2 3 4 | >>> 10/3 3.3333333333333335 >>> 10//3 3 |
号
如需进一步参考,请参阅PEP238。
1 2 | >>> 4.0//1.5 2.0 |
正如你所看到的,尽管两个操作数都是
根据python版本、将来的导入,甚至运行python的标志(例如…)的不同,单个
1 2 3 4 | $ python2.6 -Qold -c 'print 2/3' 0 $ python2.6 -Qnew -c 'print 2/3' 0.666666666667 |
。
如您所见,单个
所以,如果你知道你想要地板,一定要使用
为了补充Alex的回答,我想补充一点,从python 2.2.0a 2开始,
为了补充这些其他答案,
1 2 3 4 5 6 7 8 | $ python -m timeit '20.5 // 2' 100000000 loops, best of 3: 0.0149 usec per loop $ python -m timeit '20.5 / 2' 10000000 loops, best of 3: 0.0484 usec per loop $ python -m timeit '20 / 2' 10000000 loops, best of 3: 0.043 usec per loop $ python -m timeit '20 // 2' 100000000 loops, best of 3: 0.0144 usec per loop |
。
对于返回值类型为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import math # let's examine `float` returns # ------------------------------------- # divide >>> 1.0 / 2 0.5 # divide and round down >>> math.floor(1.0/2) 0.0 # divide and round down >>> 1.0 // 2 0.0 # now let's examine `integer` returns # ------------------------------------- >>> 1/2 0 >>> 1//2 0 |