如何在python中正确使用'is'

时间:2016-03-11 23:17:41

标签: python

我对python很新。我有一个问题。

 def set_man(self, new_pos):
    if new_pos is 'left' or 'right' or 'boat':
        self.man = new_pos
        return True
    else:
        return False
这会有效吗?或者我是否需要调用new_pos for each或?

2 个答案:

答案 0 :(得分:4)

  这会有效吗?

没有它赢了,因为你写的实际上是:

  • new_pos is "left"id(new_pos) == id("left")→布尔值X
  • 'right'bool('right')→始终True
  • 'boat'bool('boat')→始终True

当您评估该表达式时:X or True or True总是评估为True。因此,无论new_pos是什么,您的函数总是返回True并将new_pos分配给self.man

  

或者我是否需要调用new_pos for each或?

这是一种方法:

if new_pos is 'left' or new_pos is 'right' or new_pos is 'boat':

但这有点冗长,而且不是很优雅。写下来的更好方法是询问new_pos中是否('left', 'right', 'boat')

if new_pos in ('left', 'right', 'boat'):

Nota Bene:即使我更喜欢在处理字符串时使用is(因为它经常会产生像if user_input is "yes"这样的漂亮句子,请注意这是一种例外行为is运算符。

is运算符用于匹配两个实例是否是同一个实例(即内存中的同一个对象),而==运算符检查两个实例的相同,并且开发人员可以使用==定义__eq__运算符以用于自定义行为。

这就是is运算符被称为'身份'运算符,而==运算符是equality运算符。鉴于id()运算符为实例提供唯一ID:您可以将a is b翻译为id(a) == id(b)。请阅读this QA了解更多内容。

答案 1 :(得分:0)

如果您想了解相关主题,请参阅this thread

如果您只是希望代码按原样运行,请按以下方式使用:

 def set_man(self, new_pos):
    if new_pos is 'left' or new_pos is 'right' or new_pos is 'boat':
        self.man = new_pos
        return True
    else:
        return False