Python:AND评估的优化[重复]
Posted
技术标签:
【中文标题】Python:AND评估的优化[重复]【英文标题】:Python: optimisation of AND evaluation [duplicate] 【发布时间】:2019-06-27 12:39:18 【问题描述】:在 Python 3 中,我必须检查函数参数中没有发生 3 个条件,因此,我创建了 3 个函数:
def check_lenght(string_id):
# if length is right, return True, otherwise, False
def check_format(string_id):
# return True if some internal format has to be used, in another case, False
def check_case_num(string_id):
# manual iteration to check if certain characters are not contained, return True, otherwise, False
def valid_product_code(id_str):
return check_lenght(id_str) and check_format(id_str) and check_case_num(id_str)
所以,有 3 个函数,其中一个迭代字符串,这是一个潜在的非常繁重的操作。 但是,如果一个函数已经返回 False,则无需检查其余函数,我们知道逻辑 AND 将返回 False,从而能够降低计算成本。
所以,我想知道 Python(CPython 或其他实现)是否对此进行了优化,因此,return check_lenght(id_str) and check_format(id_str) and check_case_num(id_str)
的使用是正确的,或者最好一一检查这些函数并尽快返回 False其中第一个是 False,具有更优化但可能不太可读的解决方案。
如何在 Python 中评估此表达式?
我试图在谷歌上搜索这个问题的答案,也在这个网站上找到答案
【问题讨论】:
【参考方案1】:它叫做short-circuiting
,是的,Python 确实支持它:
https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not
【讨论】:
难免类似于***.com/a/2580142/2988730 嗯。当然,之前有人问过并回答过。欢迎来到 SO 诀窍是知道在哪里寻找重复项。 感谢和抱歉重复,我在谷歌和这里搜索,但我找不到答案【参考方案2】:如果a
已经返回False
,a and b and c
将不会评估b
或c
。
如果x
已经返回True
,x or y
将不会评估y
。
您会发现这就是布尔运算符在几乎所有类 C 语言中的工作方式。
【讨论】:
这听起来不对。不过,也许我误解了你的意思。 @MadPhysicist 它是短路定义的一部分。如果a
已经是False
,则不会评估b
。
啊,我想我理解其中的困惑,为清楚起见进行了编辑。
谢谢。投票翻转。以上是关于Python:AND评估的优化[重复]的主要内容,如果未能解决你的问题,请参考以下文章
GIS在地质灾害危险性评估与灾后重建中的实践技术应用及python机器学习灾害易发性评价模型建立与优化