如何正确使用';是';用python

如何正确使用';是';用python,python,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 这样行吗?或者我是否需要为每个主题打电话询问新的位置?或者如果您想了解该主题,请参阅 如果您只想让代码按原样工作,请这样使用: def set_man(

我对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

这样行吗?或者我是否需要为每个主题打电话询问新的位置?或者如果您想了解该主题,请参阅

如果您只想让代码按原样工作,请这样使用:

 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

如果要了解该主题,请参阅

如果您只想让代码按原样工作,请这样使用:

 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
这样行吗

不会的,因为你写的实际上是:

  • 新位置为“左”
    → <代码>id(新位置)=id(“左”)→ 布尔值
    X
  • “正确”
    单独使用→ <代码>布尔('right')→ 始终
    True
  • “船”
    一个人→ <代码>布尔(“船”)→ 始终
    True
当您计算该表达式时,会得到:
X或True或True
,其计算结果总是
True
。因此,无论
new\u pos
是什么,您的函数都将始终返回True,并将
new\u pos
分配给
self.man

或者我是否需要打电话询问每个或的新订单

这是一种方法:

if new_pos is 'left' or new_pos is 'right' or new_pos is 'boat':
但这有点冗长,也不是很优雅。写下它的更好方法是询问
new\u pos
是否在元组中
(“左”、“右”、“船”)

注:尽管我更喜欢在处理字符串时使用
is
(因为如果用户输入为“yes”,它通常会生成类似
的漂亮句子),但请注意这是
is
操作符的一种异常行为

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

这就是为什么
is
操作符被称为“identity”操作符,而
=
操作符是
equality
操作符的原因。假设
id()
操作符为一个实例提供了一个唯一的id:您可以将
a is b
转换为
id(a)==id(b)
。请阅读

这样行吗

不会的,因为你写的实际上是:

  • 新位置为“左”
    → <代码>id(新位置)=id(“左”)
→ 布尔值
X
  • “正确”
    单独使用→ <代码>布尔('right')→ 始终
    True
  • “船”
    一个人→ <代码>布尔(“船”)→ 始终
    True
  • 当您计算该表达式时,会得到:
    X或True或True
    ,其计算结果总是
    True
    。因此,无论
    new\u pos
    是什么,您的函数都将始终返回True并将
    new\u pos
    分配给
    self.man

    或者我是否需要打电话询问每个或的新订单

    这是一种方法:

    if new_pos is 'left' or new_pos is 'right' or new_pos is 'boat':
    
    但这有点冗长,也不是很优雅。写下来的更好方法是询问
    new\u pos
    是否在元组
    (“左”、“右”、“船”)

    注:尽管我更喜欢在处理字符串时使用
    is
    (因为如果用户输入为“yes”,它通常会生成类似
    的漂亮句子),但请注意这是
    is
    操作符的一种异常行为

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


    这就是为什么
    is
    操作符被称为“identity”操作符,而
    =
    操作符是
    equality
    操作符的原因。假设
    id()
    操作符为一个实例提供了一个唯一的id:您可以将
    a is b
    转换为
    id(a)==id(b)
    。请阅读了解更多信息。

    否。如果新位置为('left'、'right'、'boat')请尝试
    。哇,谢谢。那太快了!有两个原因不起作用。一个是由比我有更好的复制技能的人来显示。另一个是
    is
    测试一个对象是否与另一个对象相同。也就是说,只有当它们在内存中的位置相同时,它才会给出
    True
    。不过,你想要的是看看它们是否相等。如果新位置在(“左”、“右”、“船”):
    我提到的第一个原因在帖子中演示。这是一个双重重复,我不小心收回了…:)不。尝试
    如果新位置在(“左”、“右”、“船”)):
    。哇,谢谢。那太快了!有两个原因不起作用。一个是由比我有更好的复制技能的人来显示。另一个是
    is
    测试一个对象是否与另一个对象相同。也就是说,只有当它们在内存中的位置相同时,它才会给出
    True
    。不过,你想要的是看看它们是否相等。如果新的位置在(“左”、“右”、“船”):我提到的第一个原因在帖子中演示了。这是一个双重重复,我意外地收回了…:)我不认为在
    右侧添加
    不是无
    ,并且
    检查是合适的。空字符串和容器以及各种数字类型的零值在Python中也是“假”的,不仅仅是
    None
    。也许用
    bool('left')
    代替
    “left”不是None
    ?哦,我写的只是全英文的意思,不是python。这就是为什么我用反勾!但你是对的,让我详细说明一下真正正在做的事情。编辑,希望你会喜欢这样☺我不认为将
    添加到
    右侧
    船上
    不是无