真实性测试未按预期执行

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。这 总是 Falseis 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