if var is 'stringone' or 'stringtwo':
dosomething()
Run Code Online (Sandbox Code Playgroud)
这不起作用!我有一个变量,当它是值中的任何一个时我需要它做某事,但它不会进入if语句.在Java if (var == "stringone" || "stringtwo")
工作.我怎么用Python写这个?
Die*_*Epp 142
这不符合您的期望:
if var is 'stringone' or 'stringtwo':
dosomething()
Run Code Online (Sandbox Code Playgroud)
它与:
if (var is 'stringone') or 'stringtwo':
dosomething()
Run Code Online (Sandbox Code Playgroud)
这总是正确的,因为它'stringtwo'
被认为是"真实的"价值.
有两种选择:
if var in ('stringone', 'stringtwo'):
dosomething()
Run Code Online (Sandbox Code Playgroud)
或者您可以编写单独的相等测试,
if var == 'stringone' or var == 'stringtwo':
dosomething()
Run Code Online (Sandbox Code Playgroud)
不要使用is
,因为is
比较对象身份.你有时可能会因为Python内容很多字符串而侥幸成功,就像你可能在Java中使用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
Run Code Online (Sandbox Code Playgroud)
ins*_*get 20
if var == 'stringone' or var == 'stringtwo':
do_something()
Run Code Online (Sandbox Code Playgroud)
或更多pythonic,
if var in ['string one', 'string two']:
do_something()
Run Code Online (Sandbox Code Playgroud)
if var == 'stringone' or var == 'stringtwo':
dosomething()
Run Code Online (Sandbox Code Playgroud)
'is' 用于检查两个引用是否引用同一个对象。它比较内存地址。显然,“stringone”和“var”是不同的对象,它们只包含相同的字符串,但它们是“str”类的两个不同实例。所以它们当然有两个不同的内存地址,并且“is”将返回False。
归档时间: |
|
查看次数: |
346305 次 |
最近记录: |