【问题标题】:boolean as if-else condition布尔值作为 if-else 条件
【发布时间】:2020-01-25 03:55:16
【问题描述】:

您好,我是 python 新手,想确认具有布尔值的变量如何在 if-else 语句中工作。

def fun(a, b, reverse):
    if reverse:
        print(b, a)
    else:
        print(a, b)

这里的'reverse'可以是True也可以是False。那么我可以说默认情况下'if reverse'只是'if reverse is True'吗?

因为严格来说,我看不到“如果某个布尔值”实际上如何修复布尔变量的值。 (到“如果某个布尔值计算为 True”)

感谢任何帮助!


编辑: 抱歉,我意识到这段代码很简单。请忽略前面的例子。我会用这个准确地表达我的问题。

def is_even(i):
    return i%2 == 0
for i in range(20):
    if is_even(i):
        print(i, 'is even')
    else:
        print(i, 'is odd')

我想确认一下:这里 is_even() 将参数 i 带到 if-else 子句。如果 is_even(i) 计算结果为 True,则执行 if 语句下的代码。如果为 False,那么我们跳转到 else 语句下的代码。

我想知道当我们没有'if bool = true:'而只有'if bool'时,是否默认情况下,if代码采用'bool = True'结果; else-code 采用 'bool = False' 结果?

抱歉,我刚刚发现前面的示例已经在参数中确认了布尔值;但在这种情况下,布尔值只有在 for 循环遍历每个 i 之后才知道。

【问题讨论】:

  • 你试过运行它吗?这不工作吗?
  • 不清楚你在问什么,你能进一步解释一下吗?我看到有人写if ... is True:,你指的是那个吗?

标签: python if-statement boolean


【解决方案1】:

if x:x 视为布尔值。它类似于(为了讨论的目的,等同于)将x 转换为布尔值(即bool(x))。

当我们尝试以这种方式转换非布尔对象时,它们可以解析为TrueFalse - 我们称它们为Truthy 或Falsey。例如:

  • 整数为 0 时为假,否则为真
  • 空字符串''为假,其他字符串均为真
  • 所有集合(listdictset 等)为空时为假,非空时为真
  • None 是假的。大多数非None 对象默认评估为真,除非设置了其他行为(如上述三种情况)。

在您的情况下,正如@AshkayNevrekar 回答的那样,您可以将False 作为函数中reverse 参数的默认值。这样,调用者可以在不指定reverse 的情况下调用fun(),并且不会反转任何内容;或者,他们可以传入任何真实值,它反转参数。


如果您想检查,无论出于何种原因,您的论点是否完全是一个布尔值(而不仅仅是真假),那么您可以使用if x is True:if x is False:TrueFalse 的值是单例,并且 bool 的唯一可能值。如果给定一个真实的整数,这将阻止条件触发。

【讨论】:

  • 嗨,我已经意识到在前面的代码中,布尔变量已经在参数中确定了。很抱歉给您添麻烦,您能看看我添加的新示例吗?
  • @siegfried 布尔检查(使用任何运算符==><>=<=is)基本上解析为TrueFalse。在这种情况下,TrueFalse 由函数返回,而该值直接由 if 语句使用。
【解决方案2】:

IIUC,你需要返回值并赋值回

def fun(a, b, reverse=False):
    if reverse:
        return b,a
    return a, b

a,b = fun(a,b,True)

【讨论】:

  • 嗨,我已经意识到在前面的代码中,布尔变量已经在参数中确定了。很抱歉给您带来麻烦,您能看看我添加的新示例吗?
猜你喜欢
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 2023-02-07
  • 2016-02-25
  • 2013-03-05
  • 2014-12-19
相关资源
最近更新 更多