Python中是否有//等于//的运算符?

我在Python 3中发现了关于Python中的//运算符的事情。

有没有一个与ceil分开的操作符? (我知道在Python 3中进行浮点除法的/运算符。)

没有与ceil分开的操作员。 你需要import math和使用math.ceil

你可以做倒立的地板师:

 def ceildiv(a, b): return -(-a // b) 

这是有效的,因为Python的除法运算符做底点划分 (不同于在C中,整数除法截断小数部分)。

这也适用于Python的大整数,因为没有(有损)的浮点转换。

这是一个示范:

 >>> from __future__ import division # a/b is float division >>> from math import ceil >>> b = 3 >>> for a in range(-7, 8): ... print(["%d/%d" % (a, b), int(ceil(a / b)), -(-a // b)]) ... ['-7/3', -2, -2] ['-6/3', -2, -2] ['-5/3', -1, -1] ['-4/3', -1, -1] ['-3/3', -1, -1] ['-2/3', 0, 0] ['-1/3', 0, 0] ['0/3', 0, 0] ['1/3', 1, 1] ['2/3', 1, 1] ['3/3', 1, 1] ['4/3', 2, 2] ['5/3', 2, 2] ['6/3', 2, 2] ['7/3', 3, 3] 

x除以(x + (d-1)) // d时,你可以做(x + (d-1)) // d d ,即(x + 4) // 5

你总是可以直接做内联

 ((foo - 1) // bar) + 1 

在python3中,如果你关心速度的话,这个速度要比强制float分割和调用ceil()快几个数量级。 你不应该这样做,除非你已经通过使用certificate了你需要。

 >>> timeit.timeit("((5 - 1) // 4) + 1", number = 100000000) 1.7249219375662506 >>> timeit.timeit("ceil(5/4)", setup="from math import ceil", number = 100000000) 12.096064013894647 

请注意,math.ceil限于53位的精度。 如果你使用大整数,你可能得不到确切的结果。

gmpy2库提供了一个使用天花板舍入的c_div函数。

免责声明:我维护gmpy2。