如何检查变量是否等于一个字符串或另一个字符串?

2024-04-19 03:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

if var is 'stringone' or 'stringtwo':
    dosomething()

这不管用!我有一个变量,当它是其中一个值时,我需要它执行一些操作,但它不会输入if语句。在Java中,if (var == "stringone" || "stringtwo")工作。我如何用Python编写这个?


Tags: orifisvar语句javadosomethingstringone
3条回答

这不符合您的期望:

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()

或者更像是Python

if var in ['string one', 'string two']:
    do_something()
if var == 'stringone' or var == 'stringtwo':
    dosomething()

“is”用于检查两个引用是否引用同一对象。它比较内存地址。 显然,“stringone”和“var”是不同的对象,它们只包含相同的字符串,但它们是类“str”的两个不同实例。所以它们当然有两个不同的内存地址,而“is”将返回False。

相关问题 更多 >