Python,括号对print语句中布尔值的影响

Python,括号对print语句中布尔值的影响,第1张

概述你能告诉我为什么括号影响传递给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 你能告诉我为什么括号会影响传递给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 >>> Trueprint((True and True) and (True and False))#          True       and      False# Python 2.7 >>> False# Python 3.6 >>> Falseprint(True and True) and not (False or True)#         True       and not       True# Python 2.7 >>> False# Python 3.6 >>> Trueprint((True and True) and not (False or True))#         True        and not       True# Python 2.7 >>> False# Python 3.6 >>> Falseprint(False or True) and not (True and True)#          True      and not       True# Python 2.7 >>> False# Python 3.6 >>> Trueprint((False or True) and not (True and True))#          True       and not       True# Python 2.7 >>> False# Python 3.6 >>> False

答案更新和评论:

我在BolD的问题:

在python3中,print是一个函数.
print(True和False)是None,和

打印(真和假)或(真或假)

是相同的

无和(真或假)

这是假的,因为在布尔上下文中None是false-y.

是不是要告诉口译员打印某些东西或评估其他东西?这怎么可能是一个有效的语法?

因为第一部分被评估为无
那么第二次评估:
无和(真或假)
不应该打印任何东西,除非我在shell中运行它.
例如:运行None和(True或False)如果在SublimeText3等代码编辑器中运行,则不会将结果打印给用户
(我没有在sublime中使用任何额外的插件或包,只使用程序的构建函数,除非传递给print语句,否则它不会打印任何内容.)

解决方法 在python3中,print是一个函数.作为没有特定返回值的所有函数,它返回None.

因此,执行print(True和False)或(True或False)时会发生以下情况:

评估真和假,给出False.

使用False作为参数调用functionprint().
此打印(False)首先将“False”打印到终端,然后返回值None.

现在,

None or (True or False)

得到评估为真.

如果您将此作为脚本的一部分执行,则会打印“False”,整个​​表达式将被计算为True,并且由于您没有将此True分配给任何内容,因此它将被丢弃.

如果在REPL中执行此 *** 作,整个​​表达式将被计算为False,并且REPL会打印评估结果,因为如果您输入了2 2,它将打印4,因此您将获得

>>> print(True and False) or (True or False)False  # <-- from printTrue  # <-- 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 printNone   # <-- None gets printed by the outer print >>>
总结

以上是内存溢出为你收集整理的Python,括号对print语句中布尔值的影响全部内容,希望文章能够帮你解决Python,括号对print语句中布尔值的影响所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1194358.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存