在2个单独的变量中同时获得地板划分和剩余时间



是否有一个python内置(或只是优化)功能,以获得地板划分并在两个单独的变量中同时获得剩余?

示例:

a, b = 10 divided by 4

所需的结果:

a = 2
b = 2

我需要它是一种优化的解决方案。

性能结果:

第一件代码:

for i in range(10000000):
    a, b = divmod(i, 5)
took 3.99 seconds to run

第二件代码:

for i in range(10000000):
    a = i // 5
    b = i % 5
took 2.56 seconds to run

备注:

阅读@casevh答案以进行更详细的说明。

tldr:divmod()如果数字大。

使用此。这将帮助您。

a,b = divmod(10,2)

它将返回两个值

如果使用较大数字,性能会有显着差异。

这是一个使用小数字和大数字的示例:

$ py27 -m timeit -s "a=123;b=7" "divmod(a,b)"
10000000 loops, best of 3: 0.0913 usec per loop
$ py27 -m timeit -s "a=123;b=7" "a//b;a%b"
10000000 loops, best of 3: 0.047 usec per loop
$ py27 -m timeit -s "a=123333333333333333333333333333333333333;b=7222222222222222222" "divmod(a,b)"
10000000 loops, best of 3: 0.165 usec per loop
$ py27 -m timeit -s "a=123333333333333333333333333333333333333;b=7222222222222222222" "a//b;a%b"
1000000 loops, best of 3: 0.232 usec per loop

为什么有区别?

divmod()需要一个函数调用,////和%是操作员。相对于操作员,功能调用还有其他开销。因此,当计算的成本最小时,调用函数的开销要比计算的实际成本要大得多。

对于更大的数字,divmod()更快。Divmod()同时计算商和剩余的,并返回两个。//和%操作员分别计算商和剩余的,但仅返回结果之一。

divmod()有更多的开销,但只能执行一个部门。//和%的开销较少,但执行两个部门。只要开销与执行分裂时间相比,Divmod()的开销很大。但是,一旦划分的成本大于开销,Divmod()将更快。

我认为您正在寻找divmod()库函数

这是其文档的链接

示例

>>> a, b = divmod(10, 4)
>>> print a, b
>>> 2 2

最新更新