Python:If-else语句

时间:2013-10-21 01:48:12

标签: python if-statement

以下代码显示错误:

if ((type(varA) or type(varB) ) == type('t')):
    print "string involved"
elif varA<varB:
    print "RANDOM"

错误适用于这种情况:

Test Values: varA = 0, varB = adios

输出:

RANDOM

而另一段代码

if ((type(varA) == type('t')) or (type(varB)== type('t'))):
    print "string involved"
elif varA<varB:
    print "RANDOM"`

对于以下测试值:

Test Values: varA = 6, varB = adios

输出如下:

string involved

这两个“如果”条件有什么区别?我发现它们具有相同的逻辑!

3 个答案:

答案 0 :(得分:5)

这是错误的:

if ((type(varA) or type(varB) ) == type('t')):

应该是:

if type(varA) == str or type(varB) == str:

等效地:

if isinstance(varA, str) or isinstance(varB, str):

或者更短一些:

if str in ((type(varA), type(varB)):

答案 1 :(得分:1)

问题在于这个表达式:

if ((type(varA) or type(varB) ) == type('t')):

编程语言不像英语那样工作。上面的第一个评估type(varA) or type(varB),这将产生varA的类型 - 因为or返回第一个真值,任何类型都是真实的。

然后它会检查是否与type('t')相同 - 即str。这意味着当varA是字符串时,它才会成立,varB的类型将被完全忽略。

你想要的可能就是:

if type(varA) == type('t') or type(varB) == type('t'):

但是有更多的惯用/ Pythonic方法可以做到这一点;请参阅ÓscarLópez的答案。

答案 2 :(得分:1)

如果您希望测试适用于str的子类,那么最好使用isintance代替type

if any(isinstance(x, str) for x in (varA, varB)):
    ...