python中布尔值bool()怎么用,Python判断布尔值

  python中布尔值bool()怎么用,Python判断布尔值

  在python PEP8的结尾,我在读:

  不要使用==来比较布尔值的真或假。

  是:如果问候:

  否:如果greeting==True:

  更糟:ifgreetingistrue:

  如果布尔值为真,我的建议没问题,但是如果选择了False,听起来就很奇怪了。

  如果想知道变量greeting是不是假的,为什么不写呢?

  如果greeting==False:

  如果我写if not问候语:意思和上面的句子很不一样。如果问候是无呢?如果是空字符串呢?这个PEP8建议是否意味着存储布尔值的变量只包含True或False,在这些变量中不执行None?

  在我看来,这似乎是其他语言的静态类型化推荐,和python不太一致。至少比假的。

  对了,有人知道为什么如果greeting是真的:比如果greeting==真的更糟糕吗:我们是不是应该明白如果问候语是假的:是不是比如果问候语==假的更糟糕:

  为什么是None,boolean,str?那就是自找各种麻烦。

  str的状态可能并不重要。然而,如果有一个在计算它们的值之前初始化所有返回变量的策略,则可能什么都不会发生。如果在计算布尔值之前发生了异常,您可能希望知道布尔值仍然是None,而不是计算出的值。

  但没人会这么做。

  我应该使用if greeting is notnonednotgreeting 3360而不是if greeting==False:还是应该使用以if greeting is None开头的级联if?

  首先,使用is None/is not None来验证是否成功。那么,请去那里。

  你接受了答案。虽然没有给出理由和例子,但我会告诉你你想问什么,因为这是你不应该这样做的详细理由。你解雇了所有告诉我正确方法的人。很明显,我只是希望“允许”被错误地操作。

  恩。Wikipedia.org/wiki/confirmation偏见

  @Glenn Maynard:没有,我默认选择了那个答案。因为我真的没有答案,所以想关闭话题。(其他回答有些相反。这应该行得通。PEP8会这么说,所以请忽略。(其实很少。)事实并非如此。)。这是认真的回答吗?就其价值而言,我得到的最严肃的答案可能是伊格纳西奥瓦斯奎兹-艾布拉姆斯的答案,但我不能选择无作为其他价值。但是,作为另一个选项,我们不能选择彻底删除问题,但我认为这不是正确的行为。

  为什么不写x==False?我给你详细回答了。这彻底解释了为什么这是一个坏主意,根本没有提到PEP8。

  倾听你的想法,直到最后。这是个简单的事实。如果没有异常,False不需要有可识别的值。布尔值True/None可以满足所有目的。我不同意。但是我也没有拒绝你的回答。在我看来,在大多数实际情况下,我只是说不需要区分false和其他False值。我同意这一点,但这不是故事的结尾。

  不要使用==来比较布尔值的真或假。如果值为None或空字符串,则此规则不适用。严格来说,肯定是真的假的。

  @John La Roy:我读的时候,布尔值是表达式左边的乱码True或False。在比较的同时,这是一个变量而不是一个值,变量的很多可能内容在表达式中与False相同。

  我解读为“布尔值”是问候语,“真”或“假”是常数(本例中为RHS)。也许用PEP8可以表达的更清楚。

  我想我看错了。请不要把问候当成名词而不是动词。不是“这是问候”,而是“问候”)。

  你可以在PEP8的序言中看到线索。

  其中一艘真诚的大船skeyinsignsisthatcodeisreadmuchmoreofthenthanitiswritten。这里提供的指导方针

  因此,代码必须尽可能地与书面或口头语言相似。现实生活中,我们不说“如果我烦你是真的,让我知道”,只说“如果我在注释你,让我知道”。

  这是常见的原因之一,因为布尔变量(如isOpen和hasBeenProcessed)有助于代码的可读性。

  请不要做以下事情。

  if(isopen==true)).

  或者:

  Client==false(如果)

  因为变量名中已经有一个布尔值。所有给你的相等都是另一个布尔值,荒谬的调用减少了。你会停在哪里?

  if (isComplete==True).

  if ((isComplete==True)==True).

  if(((is complete==True)==True)==True).

  if((((is complete==True)==True)==True)==True).

  这种整容的观点是正确的,但我认为它在某种程度上错过了问题。OP是问非x和x的功能区别是假的。他似乎确实知道其中的区别,我认为他想知道为什么他推荐后者而不是后者。

  答得好!这让我想起了“水牛水牛水牛…”

  不应该是‘请你告诉我,我是不是真的生你的气’?

  @Framester非常正确,我已经按照你的建议改了。谢谢你。

  但是,要不要查查isOpen是不是假的?条件语句应该怎么写?

  @ gon1332:如果不是isOpen:

  没有==或者!=通过比较来比较真相最简单的理由似乎是这样的:

  0为假#结果:假

  0==False # Result:True;0相对评估为False

  1为真#结果:假

  1==True # Result:True;1评估为相对真实

  Is检查所传递的值是否正好是True/False,而不是计算结果是True还是False。

  这种行为允许:

  如果var为假:

  # False(布尔值)案例

  elif var为无:

  #无案例

  elif var==0:

  #整数0情况

  但是

  如果var==False:

  # catches False 0 case但不是无情况、空字符串情况等。

  这似乎违反直觉——这就是为什么我希望PEP8说‘不要这么做’。

  如这里所述,is用于标识,而==用于相等。

  当你需要布尔值true,但是你想拒绝1,某个字符串等等的时候,你只需要使用if var为True。

  对于大多数读者来说,这种情况可能并不明显。我怀疑PEP8声称它具有潜在的误导性,这是“更糟糕的”。有时它可能是一种必要的邪恶;但是.如果你发现自己需要的是真的,那可能说明设计有问题。无论如何,如果你曾经用过is,你可能应该注意‘为什么’需要准确地为真或为假。

  有趣的一点是,即使和PEP8同向也不明显(PEP8所指为真的情况比==真的情况更糟)

  这是鸭子打字的一部分。在Python中,通常不希望将接受的内容限制在特定的类中,而是限制在公开适当API的对象中。例如,我可以这样做:

  类MyProperty(对象):

  文件支持的布尔属性。

  def __init__(自身,文件名):

  self.value=open(文件名)。阅读()

  def _ _非零__(self):

  回归自我价值!=0

  定义保存到磁盘(自身):

  # .等等

  及格

  定义功能(已启用):

  如果未启用:

  返回

  # .

  enable _ feature=my property( enable _ feature )

  func(启用功能)

  说if enabled==False会导致这个方法不起作用。

  False是一个假值,但不是唯一的假值。和避免iSense的原因一样,避免比较真假。

  我明白你的意思,但是在我看来,写g==False,就像写len(g)==0一样,在某些情况下似乎是执行运算的正确方式。写len(g)==0时,我的目标通常是排除g为None的情况。在这种情况下,我是否应该依赖于duck类型并期望一些其他错误来检测G是None,因此没有长度?我认为两种形式没有本质区别。

  为什么要把‘无’排除在真值检验之外?将None而不是有效性False(如果是single)传递给函数,除非在这个上下文中没有None的具体定义。

  格伦梅纳德:这就是为什么我经常使用三种状态布尔,其中没有一种表示未定义。

  那么用x不是None也不是x;如果x是None,通常是这样的:elif not x:

  @kriss目前对于所有非None和false的东西,len(g)==0可能是这样,但据我所知不能保证。Len(None)抛出type error:Nonetype类型的对象没有len()——因此,您不必显式地检查None,而是隐式地抛出一个您或调用者需要处理的错误。如果您打算专门处理None,在我看来,这不如在测试中显式选中None优雅。

  @ p curry:docs.python.org/3/reference/datamodel.html#object.__len__ len(g)==0成语适用于所有有海峡的物体(即集装箱)。事实上,如果我们想这样做,我们必须选择“无”。如果我们写如果g:它可以用于无和长度检查:stackoverflow.com/questions/7771318/.

  我所知道的PEP的建议的意思是,如果你可以合理地确定foo的类型(通常是这样),测试显式的false值是多余的,并且会降低可读性。例如,在foo=[i for i in range(10) if i==x]中,可以确定foo唯一可以拥有的false值是[](假设没有抛出异常)。在这种情况下,使用foo==[]是多余的,而不是foo更好。

  另一方面,foo==[]或foo==False的语义值有时更有价值,所以应该用它来代替(x17) (IMHO)。看你想交流什么了。实际上,not foo的意思是‘foo有错误的值?’,而foo==False的意思是‘foo有而False?相同的值。

  PEP声明其中包含的所有内容都是指导原则。规则有例外,这条规则也不例外。

  Foo==False几乎不应该使用;我甚至想不出一件正确的事。

  我能想到一个:类似泡菜行为的库。真正的酸洗不同于酸洗 。

  我觉得如果foo==False,听起来比foo不读起来更像英语。

  当然,香港专业教育学院从未听过说英语的人说,‘如果你今天去商店,那是假货’

  @GlennMaynard:但是0==False,所以检查真的需要foo为False。(PEP 8s关于==True和is True的建议在我看来总是倒退;Is有时是必需的,而在任何未知输入类型的情况下==几乎总是错误的。)

  推荐foo==False是编程风格差、不专业的标志之一。

  不确定其他评论有没有回答你的问题。你说:

  如果我写如果不是问候:它将有一个非常不同的意义,上述声明。如果问候是无呢?如果是空字符串呢?

  其实,不打招呼和打招呼==假的意思不一样。但是PEP8没有说相反的话,也不代表不用问候语==False。上面写着:

  不要使用==

  无或空字符串是布尔值。因此,如果合适,请使用greeting==False,并且greeting可以是非布尔值。

  有人在你的问题下面评论道:

  .为什么有时候是None,有时候是bool,有时候是str?那只是自找各种麻烦。

  不,这是一个用例:您有一个患者数据库,其中有一个字段指示患者是否死于自杀。假设我们有属性为自杀的病人类。自杀会有三种可能的价值:

  “真”意味着“是的,我们知道他是自杀的”

  “真”的意思是“不,我们知道他死于虚假的东西”

  “无”意味着“我们实际上不知道”。

  然后,如果你想研究不是死于自杀的病人,你可以这样做:

  #加载数据库

  .

  #筛选患者

  database=[数据库中患者的患者if patient .自杀==False] # if问候==False:

  #研究数据库

  .

  量化宽松政策.这是数据科学中的典型案例。False值表示您知道一些错误,而None值表示您什么都不知道。

  我通常把布尔变量命名为pattern IsName,所以在你的例子中它是一个Greeting。这使得支票读起来好像是“正在收回”/如果不是“正在收回”,这非常直观。

  您用if not描述的模糊性是在布尔比较中使用非布尔类型的结果。这种情况通常应该避免,因为它非常混乱。

  我基本上是喜欢你的,但是我在下面的评论里解释了为什么我相信没有问题。完美的宇宙是没有问题的。但是在现实世界中,写像if not IsGreeting:这样的语句似乎会引起麻烦,因为倒楣的事情发生了。

  因为这是与PEP8相关的问题.PEP8推荐变量名标识符以小写字母开头,用下划线代替驼峰大小写。建议使用驼峰大小写字母(以大写字母开头)作为类名。

  @lylh:非常好的建议。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • python怎么判断素数然后调用函数输出,python判断素数函数,python怎么判断素数
  • Python怎么判断素数,python判断素数函数
  • python中如何判断相等,python判断值是否相等的符号
  • python判断元组中的个数,数组查找某个元素
  • python判断是否存在文件,python判断是否有文件
  • python判断字符串是否为浮点,python如何判断输入的是数字还是字符串
  • python判断字符为数字还是字母,python判断字符串是否包含字母和数字
  • python判断输入的字符是否为数字,python 判断字符串是不是数字
  • python怎么判断一个数是不是整数,用python判断是否为整数
  • python判断某个字符串中是否存在指定字符,python查询字符串是否包含某字符串
  • Python怎么判断一个数是不是质数,用python判断质数
  • python判断素数的程序代码,python编写素数判断函数
  • python判断对象的数据类型,python 判断对象类型
  • python判断是否为工作日,python datetime计算日期差
  • python判断一个数是否为完全数,Python判断是整数
  • 留言与评论(共有 条评论)
       
    验证码: