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 已经返回Falsea and b and c 将不会评估bc

如果x 已经返回Truex or y 将不会评估y

您会发现这就是布尔运算符在几乎所有类 C 语言中的工作方式。

【讨论】:

这听起来不对。不过,也许我误解了你的意思。 @MadPhysicist 它是短路定义的一部分。如果a 已经是False,则不会评估b 啊,我想我理解其中的困惑,为清楚起见进行了编辑。 谢谢。投票翻转。

以上是关于Python:AND评估的优化[重复]的主要内容,如果未能解决你的问题,请参考以下文章

GIS在地质灾害危险性评估与灾后重建中的实践技术应用及python机器学习灾害易发性评价模型建立与优化

如何优化 FOR 循环下存在的数据库调用(平台:Django、Python、Postgres)[重复]

Python数据分析常用30段优化代码

Python数据分析常用30段优化代码

Python数据分析常用30段优化代码

python机器学习入门模型优化(以决策树为例),来自kaggle竞赛