sách gpt4 ăn đã đi

python - Python中的幂运算符(**)翻译成什么?

In lại 作者:太空狗 更新时间:2023-10-29 21:36:46 27 4
mua khóa gpt4 giày nike

换句话说,两个星号后面存在什么?是简单地将数字乘以 x 还是其他什么?

作为后续问题,写2**3vẫn2*2*2比较好。我问是因为我听说在 C++ 中最好不要使用 pow() 进行简单计算,因为它会调用一个函数。

câu trả lời hay nhất

如果您对内部结构感兴趣,我会反汇编指令以获取它映射到的 CPython 字节码。使用 Python3:

»»» def test():
return 2**3
...:
»»» dis.dis(test)
2 0 LOAD_CONST 3 (8)
3 RETURN_VALUE

好的,这似乎已经在输入时就完成了计算,并存储了结果。对于 2*2*2,您将获得完全相同的 CPython 字节码(请随意尝试)。因此,对于计算结果为常量的表达式,您会得到相同的结果,这无关紧要。

如果你想要变量的力量怎么办?

现在你得到了两个不同的字节码:

»»» def test(n):
return n ** 3

»»» dis.dis(test)
2 0 LOAD_FAST 0 (n)
3 LOAD_CONST 1 (3)
6 BINARY_POWER
7 RETURN_VALUE

sự tương phản

»»» def test(n):
return n * 2 * 2
....:

»»» dis.dis(test)
2 0 LOAD_FAST 0 (n)
3 LOAD_CONST 1 (2)
6 BINARY_MULTIPLY
7 LOAD_CONST 1 (2)
10 BINARY_MULTIPLY
11 RETURN_VALUE

现在的问题当然是,BINARY_MULTIPLY 是否比 BINARY_POWER 操作更快?

最好的尝试方法是使用 timeit。我将使用 IPython %timeit 魔法。这是乘法的输出:

%timeit test(100)
The slowest run took 15.52 times longer than the fastest. This could mean that an intermediate result is being cached
10000000 loops, best of 3: 163 ns per loop

为了权力

The slowest run took 5.44 times longer than the fastest. This could mean that an intermediate result is being cached 
1000000 loops, best of 3: 473 ns per loop

您可能希望对代表性输入重复此操作,但根据经验,乘法看起来更快(但请注意上述关于输出方差的警告)。

如果您想了解更多内部信息,我建议您深入研究 CPython 代码。

关于python - Python中的幂运算符(**)翻译成什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33762613/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress