测试通过函数传递到 if 语句中的 Truthy 或 Falsy 参数
Testing Truthy or Falsy arguments passed through a function into an if statement
我也在画这个空白。如果有人能帮助我理解为什么我的代码没有打印出预期的输出,我将不胜感激:
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'
请帮助我理解我做错了什么。我认为该函数需要测试参数的实际真值,但我不明白我遗漏了什么。
bval is True
检查 [1, 2, 3]
是否真的是 True 对象。您需要 bool()
之类的东西来评估对象是否为真值但与 True 对象不相同。
[1,2,3]
不等于 True
,但是,如果您输入类似 1
的内容,则 1 == True
会通过,但是当您使用 is
它永远是 False 除非它是 True
is
检查引用相等性,而不是真实性。现在显然 [1,2,3]
(这是一个 list
对象)确实 不指向 True
对象(这是 bool
对象)。很难说这里没有定义的abcdef
是否指向True
。但是因为你没有提供,我假设它指向不同的东西。
只有 bool_to_str(True)
或 bool_to_str(<expr>)
其中 <expr>
计算结果为 bool
即 True
在 'Yes'
中(bool
是单例,所以所有 True
都是同一个对象)。
关键是为了检查<expr>
的真实性,只需写if <expr>:
。所以在你的情况下应该是:
if <b>bval</b>:
你也可以——虽然我建议反对它,用bool(..)
明确检查真实性并检查引用相等性,如:
if <b>bool(</b>bval<b>) is True</b>:
通常写is
不是一个好主意。仅当您想检查两个变量是否指向 same(即 not equivalent)对象时,或者对于像 True
、None
、()
等一些单例对象,它真的很有意义。
我也在画这个空白。如果有人能帮助我理解为什么我的代码没有打印出预期的输出,我将不胜感激:
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'
请帮助我理解我做错了什么。我认为该函数需要测试参数的实际真值,但我不明白我遗漏了什么。
bval is True
检查 [1, 2, 3]
是否真的是 True 对象。您需要 bool()
之类的东西来评估对象是否为真值但与 True 对象不相同。
[1,2,3]
不等于 True
,但是,如果您输入类似 1
的内容,则 1 == True
会通过,但是当您使用 is
它永远是 False 除非它是 True
is
检查引用相等性,而不是真实性。现在显然 [1,2,3]
(这是一个 list
对象)确实 不指向 True
对象(这是 bool
对象)。很难说这里没有定义的abcdef
是否指向True
。但是因为你没有提供,我假设它指向不同的东西。
只有 bool_to_str(True)
或 bool_to_str(<expr>)
其中 <expr>
计算结果为 bool
即 True
在 'Yes'
中(bool
是单例,所以所有 True
都是同一个对象)。
关键是为了检查<expr>
的真实性,只需写if <expr>:
。所以在你的情况下应该是:
if <b>bval</b>:
你也可以——虽然我建议反对它,用bool(..)
明确检查真实性并检查引用相等性,如:
if <b>bool(</b>bval<b>) is True</b>:
通常写is
不是一个好主意。仅当您想检查两个变量是否指向 same(即 not equivalent)对象时,或者对于像 True
、None
、()
等一些单例对象,它真的很有意义。