执行以下操作会比仅使用 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 将其运算符转换为方法调用。它不知道他们中的任何一个实际上在做什么。确切的规则可能会变得复杂,但或多或少,
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 会快一点。
恕我直言,这些不同的处理方式都不会对代码的执行产生真正的影响。这都是一点白噪音。