if var is 'stringone' or 'stringtwo':
dosomething()
这不起作用!我有一个变量,当它是其中一个值时,我需要它来做某事,但它不会进入 if 语句。在 Javaif (var == "stringone" || "stringtwo")
中工作。我如何用 Python 写这个?
if var is 'stringone' or 'stringtwo':
dosomething()
这不起作用!我有一个变量,当它是其中一个值时,我需要它来做某事,但它不会进入 if 语句。在 Javaif (var == "stringone" || "stringtwo")
中工作。我如何用 Python 写这个?
这不符合您的预期:
if var is 'stringone' or 'stringtwo':
dosomething()
它与以下内容相同:
if (var is 'stringone') or 'stringtwo':
dosomething()
这始终是正确的,因为'stringtwo'
被认为是“真实”值。
有两种选择:
if var in ('stringone', 'stringtwo'):
dosomething()
或者你可以编写单独的相等测试,
if var == 'stringone' or var == 'stringtwo':
dosomething()
不要使用is
,因为is
比较对象身份。有时你可能会侥幸逃脱,因为 Python 实习了很多字符串,就像你在 Java 中可能侥幸逃脱,因为 Java 实习了很多字符串。is
但除非你真的想要对象身份,否则不要使用。
>>> 'a' + 'b' == 'ab'
True
>>> 'a' + 'b' is 'abc'[:2]
False # but could be True
>>> 'a' + 'b' is 'ab'
True # but could be False
if var == 'stringone' or var == 'stringtwo':
do_something()
或者更多pythonic,
if var in ['string one', 'string two']:
do_something()
if var == 'stringone' or var == 'stringtwo':
dosomething()
'is' 用于检查两个引用是否指向同一个对象。它比较内存地址。显然,“stringone”和“var”是不同的对象,它们只是包含相同的字符串,但它们是“str”类的两个不同实例。所以它们当然有两个不同的内存地址,'is' 将返回 False。
两个单独的检查。此外,使用==
而不是is
检查相等性而不是身份。
if var=='stringone' or var=='stringtwo':
dosomething()
for a in soup("p",{'id':'pagination'})[0]("a",{'href': True}):
if createunicode(a.text) in ['<','<']:
links.append(a.attrMap['href'])
else:
continue
这个对我有用。