当前位置: 首页 > 知识库问答 >
问题:

测试通过函数传递到if语句的Truthy或Falsy参数

刘胜泫
2023-03-14

我在这个问题上也是空白。如果有人能帮助我理解为什么我的代码没有打印预期的输出,而不是提供答案,我将不胜感激:

def bool_to_str(bval):
    if bval is True:
        mytest = 'Yes'
    else:
        mytest = 'No'
    return mytest

预期产出:

>>>bool_to_str([1, 2, 3])
'Yes'
>>>bool_to_str(abcdef)
'Yes'

实际输出是什么:

>>>bool_to_str([1, 2, 3])
'No'
>>>bool_to_str(abcdef)
'No'

请帮助我理解我做错了什么。我认为函数需要测试参数的实际真值,但我不明白我遗漏了什么。

共有3个答案

祁建业
2023-03-14

[1,2,3]不等于True,但是,如果您输入类似1的内容,则1==True将通过,但当您使用is时,它将始终为False,除非它是True

卫君博
2023-03-14

is检查引用的相等性,而不是真实性。现在很明显,[1,2,3](这是一个列表对象)没有指向True对象(这是bool对象)。很难说这里没有定义的abcdef是否指向True。但既然你没有提供它,我就假设它指向不同的东西。

只有bool_to_str(True)bool_to_str(

要点是为了检查

if bval:

您也可以-尽管我建议您不要这样做,但请使用bool(…)明确检查真实性,并检查引用相等性,如:

if bool(bval) is True:

通常写is不是一个好主意。只有当您想检查两个变量是否指向同一(即不等效)对象,或者对于某些单例对象,如TrueNone(),等等,才有意义。

农永宁
2023-03-14

bval为True检查[1,2,3]是否为真对象。您需要类似于bool()的内容来评估对象是否为真值,但与真对象是否相同。

 类似资料:
  • 我有一个函数可以返回三个值中的一个:a、b或c。 我需要根据:A、B或C的返回值执行不同的语句。据我所知,最好的方法是: 如果不引入这个新变量,是否有其他方法来计算的返回值<也许是这样的吧?

  • 除了明确的 true 和 false 两个 boolean 类型外,JavaScript 可以在需要用到布尔类型值的上下文中使用强制类型转换将值转换为布尔值。 1. 慕课解释 Truthy 指的是转换后的值为’真‘的值,Falsy 是在 Boolean 上下文中已认定可转换为‘假‘的值。 变量类型 Truthy Falsy boolean true false string 非空字符串 ‘’ nu

  • 我有一个关于javascript truthy/falsy的问题 据我所知,任何包括负数在内的非零数都是真实的。但如果是这样那为什么 但也

  • 本文向大家介绍JavaScript 通过引用或值传递参数,包括了JavaScript 通过引用或值传递参数的使用技巧和注意事项,需要的朋友参考一下 示例 在JavaScript中,所有参数均按值传递。当函数将新值分配给参数变量时,该更改将对调用者不可见: 但是,对此类参数的(嵌套)属性所做的更改对调用者将是可见的: 这可以看作是通过引用进行的调用:尽管函数无法通过为其分配新值来更改调用者的对象,但

  • 问题内容: 我正在使用PhantomJS page.evaluate()进行抓取。我的问题是我传递到Webkit页面的代码是沙盒化的,因此无法访问我的主要幻象脚本的变量。这使得很难使抓取代码通用。 如何将参数推入页面? 问题答案: 我遇到了确切的问题。可以使用一些技巧,因为它也可以接受字符串。 有几种方法可以执行此操作,但是我使用了一个称为的包装器,该包装器接受其他参数以传递给必须在Webkit端

  • 有人能使用下面的示例数据解释JavaScript Truthy和Falsy吗?我读过其他线程,但仍然感到困惑。 根据我的理解,我认为var a=1 是唯一的真理,其余的都是虚假的-这是正确的吗?