我对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或?
答案 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