Python,括号对print语句中布尔值的影响
你能告诉我为什么括号会影响传递给print语句的布尔值的输出吗?
例: print(True and False) or (True or False) # False or True # Python 2.7 >>> True # Python 3.6 >>> False 但是当我使用括号时: print((True and False) or (True or False)) # False or True # Python 2.7 >>> True # Python 3.6 >>> True Python 3中的解释器是否只看到第一部分(第一个括号内的部分)?如果是这样,为什么它不会为该行的其余部分抛出错误? 其他例子: print(True and True) and (True and False) # True and False # Python 2.7 >>> False # Python 3.6 >>> True print((True and True) and (True and False)) # True and False # Python 2.7 >>> False # Python 3.6 >>> False print(True and True) and not (False or True) # True and not True # Python 2.7 >>> False # Python 3.6 >>> True print((True and True) and not (False or True)) # True and not True # Python 2.7 >>> False # Python 3.6 >>> False print(False or True) and not (True and True) # True and not True # Python 2.7 >>> False # Python 3.6 >>> True print((False or True) and not (True and True)) # True and not True # Python 2.7 >>> False # Python 3.6 >>> False 答案更新和评论: 我在BOLD的问题: 在Python3中,print是一个函数. 打印(真和假)或(真或假) 是相同的 无和(真或假) 这是假的,因为在布尔上下文中None是false-y. 是不是要告诉口译员打印某些东西或评估其他东西?这怎么可能是一个有效的语法? 因为第一部分被评估为无 解决方法
在Python3中,print是一个函数.作为没有特定返回值的所有函数,它返回None.
因此,执行print(True和False)或(True或False)时会发生以下情况: 评估真和假,给出False. 使用False作为参数调用functionprint(). 现在, None or (True or False) 得到评估为真. 如果您将此作为脚本的一部分执行,则会打印“False”,整个??表达式将被计算为True,并且由于您没有将此True分配给任何内容,因此它将被丢弃. 如果在REPL中执行此操作,整个??表达式将被计算为False,并且REPL会打印评估结果,因为如果您输入了2 2,它将打印4,因此您将获得 >>> print(True and False) or (True or False) False # <-- from print True # <-- from the REPL,result of the evaluation of the whole expression 如果执行print(True和False)和(True或False),会有一点区别.这次,在打印之后,表达式是 None and (True or False) 由于None在布尔上下文中是假的,所以Python知道结果和将是假的(甚至不需要评估(真或假)部分),并返回None,因为它是允许它决定真实性的第一个值的表达. 如果你像以前一样将它作为脚本的一部分执行,整个??表达式将被计算为None,并且由于您没有将此None分配给任何内容,整个??表达式将被计算为None.由于这是所有不返回任何函数的普通返回值,因此REPL不会打印它,除非您明确要求它: >>> print(True and False) and (True or False) False # <-- from print,None doesn't get printed >>> print(print(True and False) and (True or False)) False # <-- from the inner print None # <-- None gets printed by the outer print >>> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |