比较或if语句更快

问题描述 投票:0回答:1

执行以下操作会比仅使用 if 语句更快或更慢吗?

mult = x or y 
# Assuming python considers something 
# being "0" as false and something being 1 or higher 
# (or -1 and lower) as true

mult = (x/x) or (y/y) 
# This is in the case Python doesn't do what was
# described above

draw(x, y, 0, 255, 0, 255*mult)
# draw(x_pos, y_pos, red, green, blue, alpha)

不知道如何更好地措辞,更不用说是否有必要更好地措辞。这只是我在谈论优化代码以提高性能时感到好奇的事情,我想到了这样的想法,但不确定,因为谷歌没有提供任何有用的结果(所有结果都是不相关的)。

我可能也可以在自己的时间对此进行测试,但我觉得询问那些知道计算机如何使用比较与 if 语句进行工作的人可能是最有帮助的。

python performance if-statement optimization comparison
1个回答
0
投票

Python 将其运算符转换为方法调用。它不知道他们中的任何一个实际上在做什么。确切的规则可能会变得复杂,但或多或少,

mult = x or y
变成了

mult = x.__bool__() or y.__bool__()

x
y
决定
bool
对他们意味着什么,并相应地返回
True
False
。对于整数,
0
False
,其他都是
True
or
短路,因此如果
x
True
,则不会调用
y
方法。

mult = (x/x) or (y/y)
变成类似

mult = x.__div__(x).__bool__() or y.__div__(y).__bool__()

x/x
几乎总是
1
(至少对于整数而言),但 python 不知道这一点。它需要进行额外的
div
调用。这让它变得更慢。写成
mult = 1 or 1
会更快,或者更好,写成
mult = 1
。例外情况是当值为
0
时,您会得到
ZeroDivisionError

draw(x, y, 0, 255, 0, 255*mult)
vs
draw(x_pos, y_pos, red, green, blue, alpha)

第一个使用文字,这比查找和读取变量

red
等要快一些......但它有乘法的成本。 1 会快一点。

恕我直言,这些不同的处理方式都不会对代码的执行产生真正的影响。这都是一点白噪音。

© www.soinside.com 2019 - 2024. All rights reserved.