真实性测试未按预期执行
Truthiness test not performing as expected
我有一个简单的函数来测试元组中的项目以查看它是否为真。由于某种原因,所有测试都返回 True (...if connection:...
),即使被测试的值是 1(假设为 True)或 0(假设为 false)。
我测试了1 == True(输出:True),1 == False(假),connection is True(False)只是想了解是怎么回事。
用户输入:players = [('a', 1), ('b', 0)]
函数:
def validplayers(players):
for player, connection in players:
if connection:
player
print player, connection, 1 == True, 1 == False, connection is True
输出:
a 1 True False False
b 0 True False False
connection
var 正在传递 1 或 0,type(connection)
将其定义为 int。
您的错误是查看 connection is True
。这 总是 False
。 is
tests for identity,两个表达式导致对内存中 相同对象的引用 。
如果你想打印一个对象的真值,使用bool()
function:
>>> bool(1)
True
>>> bool(0)
False
1 == True
之所以有效是因为在 Python 中,bool
类型是 int
的子类:
>>> issubclass(bool, int)
True
True
的整数值为1,False
的整数值为0
。相等性测试不适用于其他整数值:
>>> 1 == True
True
>>> 2 == True
False
>>> bool(2)
True
请注意,您的 if
测试在其他方面毫无意义;唯一被执行或不被执行的是行 player
,它是一个无操作表达式,只是 returns 对 player
的引用,但由于没有其他内容,因此引用是未使用。
如果您希望 print
语句仅在 if
为真时执行,您需要将其缩进到 if
的右侧并使其成为嵌套块:
def validplayers(players):
for player, connection in players:
if connection:
print player, connection, bool(connection)
这只会为玩家打印一些东西 a
:
>>> def validplayers(players):
... for player, connection in players:
... if connection:
... print player, connection, bool(connection)
...
>>> validplayers([('a', 1), ('b', 0)])
a 1 True
我有一个简单的函数来测试元组中的项目以查看它是否为真。由于某种原因,所有测试都返回 True (...if connection:...
),即使被测试的值是 1(假设为 True)或 0(假设为 false)。
我测试了1 == True(输出:True),1 == False(假),connection is True(False)只是想了解是怎么回事。
用户输入:players = [('a', 1), ('b', 0)]
函数:
def validplayers(players):
for player, connection in players:
if connection:
player
print player, connection, 1 == True, 1 == False, connection is True
输出:
a 1 True False False
b 0 True False False
connection
var 正在传递 1 或 0,type(connection)
将其定义为 int。
您的错误是查看 connection is True
。这 总是 False
。 is
tests for identity,两个表达式导致对内存中 相同对象的引用 。
如果你想打印一个对象的真值,使用bool()
function:
>>> bool(1)
True
>>> bool(0)
False
1 == True
之所以有效是因为在 Python 中,bool
类型是 int
的子类:
>>> issubclass(bool, int)
True
True
的整数值为1,False
的整数值为0
。相等性测试不适用于其他整数值:
>>> 1 == True
True
>>> 2 == True
False
>>> bool(2)
True
请注意,您的 if
测试在其他方面毫无意义;唯一被执行或不被执行的是行 player
,它是一个无操作表达式,只是 returns 对 player
的引用,但由于没有其他内容,因此引用是未使用。
如果您希望 print
语句仅在 if
为真时执行,您需要将其缩进到 if
的右侧并使其成为嵌套块:
def validplayers(players):
for player, connection in players:
if connection:
print player, connection, bool(connection)
这只会为玩家打印一些东西 a
:
>>> def validplayers(players):
... for player, connection in players:
... if connection:
... print player, connection, bool(connection)
...
>>> validplayers([('a', 1), ('b', 0)])
a 1 True