热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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 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是一个函数. print(True and False)None,和

print(True and False) or (True or False)

是相同的

None and (True or False)

其是False,因为没有一个是假-γ在布尔上下文.

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

因为第一部分被评估None 然后第二次评估: None and (True or False) 除非我在shell中运行它,否则不应该打印任何东西. 例如:None and (True or False)如果运行在像SublimeText3这样的代码编辑器中运行,则运行不会将结果打印给用户(我没有在sublime中使用任何额外的插件或包,只有程序的构建函数,并且它不会打印任何东西除非它被传递给印刷声明.)

小gif演示



1> Thierry Lath..:

在Python3中,print是一个函数.作为没有特定返回值的所有函数,它返回None.

那么,执行时会发生print(True and False) or (True or False)以下情况:

True and False得到评估,给出False.

print()使用Falseas参数调用该函数.此print(False)第一打印"假"到终端,然后返回该值None.

现在,

None or (True or False)

得到评估为真.

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

如果在REPL中执行此操作,则会打印"False",整个​​表达式将被计算到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 and False) and (True or False).这次,在打印之后,表达式是

None and (True or False)

None布尔上下文中的and假法一样,Python知道结果将是假的(甚至不需要评估(True or False)部分),并返回None,因为它是第一个允许它决定表达式的真实性的值.

如果你像以前一样将它作为脚本的一部分执行,则会打印"False",对整个表达式进行求值None,并且由于你没有将None它赋给任何东西,它就会被丢弃.

如果在REPL中执行此操作,则会打印"False",整个​​表达式将被计算为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 
>>> 


推荐阅读
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • WPF之Binding初探
      初学wpf,经常被Binding搞晕,以下记录写Binding的基础。首先,盗用张图。这图形象的说明了Binding的机理。对于Binding,意思是数据绑定,基本用法是:1、 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
  • 详解 Python 的二元算术运算,为什么说减法只是语法糖?[Python常见问题]
    原题|UnravellingbinaryarithmeticoperationsinPython作者|BrettCannon译者|豌豆花下猫(“Python猫 ... [详细]
  • QuestionThereareatotalofncoursesyouhavetotake,labeledfrom0ton-1.Somecoursesmayhaveprerequi ... [详细]
  • java布尔字段用is前缀_POJO类中布尔类型的变量都不要加is前缀详解
    前言对应阿里巴巴开发手册第一章的命名风格的第八条。【强制】POJO类中布尔类型的变量都不要加is前缀,否则部分框架解析会引起序列化错误。反例:定义为基本 ... [详细]
  • const限定符全解一、const修饰普通变量  intconsta500;  constinta600;  上述两种情况相同,都是声明一个const型的变量,它们 ... [详细]
author-avatar
手机用户2602890681
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有