Python中“a ==('a'或'b')”是什么意思?

时间:2017-04-28 15:24:03

标签: python python-3.x logical-operators

在Python上查看此代码:

a='a'
print(a==('a' or 'b'))
a='b'
print(a==('a' or 'b'))

输出将是:

True
False

你能解释一下为什么请你吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

要将其分解,首先评估括号。 所以,"a" or "b" - “a”是真实的,并且会自行返回。 “b”永远不会被评估,因为非空字符串将始终是真实的。

为了更好地了解这一点,请在提示中单独运行

>>> ('a' or 'b') 
'a'

因此,您最终得到'a' == 'a' - 这是真的

在第二个例子中,a设置为'b',所以同样的事情发生,只有'b'≠'a'所以它返回false

答案 1 :(得分:1)

@ rm-vanda是对的。

我相信使用列表或元组可以更好地找到您期望的行为:

public class RandomNumbers : MonoBehaviour {
    public Transform mCanvas;
    public Text[] numbers;
    int idx = 0;

    void Start()
    {
        //Randomizes the list of numbers
        Shuffle(numbers);

        StartCoroutine("CreateNum"); 
    }

    IEnumerator CreateNum()
    {
        while (idx < numbers.Length)
        {
            Text g = Instantiate(numbers[idx], new Vector3(Random.Range(-100, 100), Random.Range(-100, 100), 0), Quaternion.identity);
            g.transform.SetParent(mCanvas, false);
            yield return new WaitForSeconds(2f);
            Destroy(g);
            ++idx;
        }
    }

    //This is called a Fisher-Yates shuffle https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
    //This function can be used with any Array or List you send it.
    private static void Shuffle<T>(IList<T> list)  
    {  
        int n = list.Count;  
        while (n > 1) {  
            n--;  
            int k = Random.Range(0, n + 1);  
            T value = list[k];  
            list[k] = list[n];  
            list[n] = value;  
        }  
    }

}

答案 2 :(得分:0)

当您使用'a' or 'b'这样的表达式时,它将返回不是False的第一个值。话虽如此,在两种情况下,表达式都将返回'a'

我假设你可以自己弄清楚其余部分,但第一个是True,因为你等同于'a' == 'a',而等于'b' == 'a'

答案 3 :(得分:0)

('a' or 'b')将始终解析为'a',因为'a'在布尔上下文中被解析为True

如果x or y为True(= x的不同,xNone,{{1},则

False会返回""的值}},(,)[]),否则返回{}的值。