这两个python语句是相同的吗?

2024-06-17 08:38:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这两个陈述

return self.getData() if self.getData() else ''

以及

^{pr2}$

我想知道它们是相同的还是有区别的


Tags: selfreturnifelse区别getdatapr2
3条回答

可能,但前提是self.getData()是一个纯函数且没有副作用。更重要的是,self.getData()返回的对象也必须没有任何副作用,并且始终返回布尔值。在

在最简单的情况下,如果f()定义为:

def f():
    return ["Hello World!"]

然后是:

^{pr2}$

在逻辑上等同于:

x = f() or ""

由于f()在这两种情况下都被视为布尔表达式,f()将计算为True(ish)或{}(ly)值,两个表达式都将返回相同的结果。在

这叫做Logical Equivalence

In logic, statements p and q are logically equivalent if they have the same logical content. This is a semantic concept; two statements are equivalent if they have the same truth value in every model (Mendelson 1979:56). The logical equivalence of p and q is sometimes expressed as p \equiv q, Epq, or p \Leftrightarrow q. However, these symbols are also used for material equivalence; the proper interpretation depends on the context. Logical equivalence is different from material equivalence, although the two concepts are closely related.

它们将得到相同的结果,因为这两种方法都在布尔上下文中处理self.getData()的结果,但要注意:

(一) return self.getData() if self.getData() else ''

将运行函数getData两次,而

(二) return self.getData() or ''

只运行一次。如果getData()需要一段时间才能执行,这意味着1)与2)如果函数getData()有任何副作用,那么这一点很重要。在

坚持2)。在

我之所以说不,是因为如果self.getData()在其操作过程中发生了变化,那么第一个语句就有可能返回一个不同的结果,因为它将对它进行第二次调用。在

相关问题 更多 >