专栏首页企鹅号快讯每周四更面试题:True+True=?

每周四更面试题:True+True=?

面试题:True + Ture == ?

Python 的 “+” 号会根据操作对象数据类型的不同而进行重载,操作对象为数字类型时,它是算术运算符;操作对象为序列类型时,它是序列连接符。

那么问题是:如果操作对象为布尔类型呢?

你是否会认为?在揭晓答案前,首先了解一下 Python 的布尔数据类型。

布尔值

布尔数据类型只有 True or False 两个值,它作为逻辑判断的基准被应用在程序各处的布尔上下文中(e.g. if、while、for 等逻辑控制语句)。

虽然我们也会经常在布尔上下文中使用表达式语句(e.g. i > 0)或其他数据类型对象(e.g. 1, ’abc')作为判断的依据,但实际上无论使用何种方式最终得到的结果都是一个布尔值。

表达式返回值:

自定义对象返回布尔值:

如果一个自定义对象实现了特殊方法(Python 3.x 为),那么当对象存在于布尔上下文或使用内置函数 bool 来进行处理时,该特殊方法就会被隐式的调用。

OUTPUT:

当然,除了自定义对象之外,Python 所有的非空内置对象在布尔上下文中都会被当作 True 来处理,反之则会被当成 False 来处理

(Python 真值表)

布尔类型是特殊的整数类型

布尔类型对象之所以能够支持常规的算术运算,是因为布尔类型根本就是整数类型的一个子类,布尔类型对象继承了大量的整数类型方法。例如:、等。

但需要注意的是,即便 True 和 1 的 Value 是相同的,但两者却不可能是同一个对象,因为两者的 Type 不同。(ps. 只有两个对象的 Id、Value、Type 都相同时,才能被判定为同一个对象。)

最后值得一提的是:当我们使用增强型赋值操作符来操作布尔类型对象时,到底会发生什么样的事情呢?

在 Python 2.x 中,以上的操作在语法层面是被允许的,因为 Python 2.x 中的 True or False 只是 LEBG 作用域命名空间中的一个变量名。

通过 type 和 id 函数可以看出,在上述代码中其实存在着两个不同的 True 对象。一个 Python 内置的布尔类型对象 True,一个是新建的整数类型对象 “True”。

实际上当我们对 True 使用增强型赋值操作符时,并没有直接修改位于 Builtin 内置作用域中 True 对象,而是在 Local 本地作用域中创建了一个新的变量对象 “True”。

当我们在同一个本地作用域中 Delete 掉 “True” 对象的引用之后,内置作用域中的 True 又会重新出现。这是因为 Python 访问变量时,搜索变量名的作用域顺序为「L -> E -> G -> B」。

显然,Python 2.x 中的这种特性是非常危险的。假若你想报复社会,只需要在 Python 模块中写入即可实现。

也正因如何,Python 3.x 中 True or False 正式变成了不允许被赋值的保留字,强行赋值则会触发类型下列的语法错误。

JmilkFan-范桂飓

专注于 Python、云计算与大数据

技术即沟通

下一位 offer 达人,就是你 !!

本文来自企鹅号 - JmilkFan媒体

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 重磅!清华成立“脑与智能”和“未来”两大实验室,跨学科AI深度融合

    清华大学昨天一口气成立了两个跨学科的研究机构——“清华大学脑与智能实验室”和“清华大学未来实验室”,两个都与人工智能有着密不可分的联系。 其中,清华大学脑与智能...

    企鹅号小编
  • Java后台编程初学者,这些常识你都知道吗?

    Java编程中的一些常识,希望有心学习的可以多看一眼,如果你是高手欢迎指点文中小编的不足,感谢支持。以下这些编程常识均由小编结合个人水平以及搜寻相关资料整理编辑...

    企鹅号小编
  • tornado全面剖析与实践系列1

    猿助猿的技术栈是基于Tornado的, 在学习的过程中参考了很多文章, 但是内容大都碎片化, 缺少系统性讲解, 而且不少关于异步应用的内容还是基于过时的旧版本....

    企鹅号小编
  • (转载)EF 使用code first模式创建数据库和 填充种子数据

    第一篇:来自 .net 开发菜鸟 博主的文章:https://www.cnblogs.com/dotnet261010/p/8035213.html

    CherishTheYouth
  • 信号的频谱 频谱密度 功率谱密度 能量谱密度

    这是我在知乎上的一个回答,鉴于很多朋友对这几个概念不是很清楚,就在公众中发一下。  

    猫叔Rex
  • MATLAB技巧——sort和sortrows函数

    1、sort函数 sort函数用于对数据进行排序,通过help sort命令,可以查找到sort函数的具体用法: Y = SORT(X,DIM,MODE) ha...

    zhaozhiyong
  • php基础(一)

    static 是静态变量,在局部函数中存在且只初始化一次,使用过后再次使用会使用上次执行的结果; 作为计数,程序内部缓存,单例模式中都有用到。

    仇诺伊
  • 《谷歌访问助手》访问Chrome商店 Gmail 谷歌搜索

    每当我向小伙伴分享超棒的Chrome插件(扩展程序)的时候, 总会有小伙伴问,从哪里下载Chrome浏览器以及Chrome扩展程序, 这篇文章就为这个问题做一个...

    zhaoolee
  • 微信公众号数据分析。

    张俊红
  • 原创|面试官:Java对象一定分配在堆上吗?

    最近在看 Java 虚拟机方面的资料,以备工作中的不时之需。首先我先抛出一个我自己想的面试题,然后再引出后面要介绍的知识点如逃逸分析、标量替换、栈上分配等知识点

    每天晒白牙

扫码关注云+社区

领取腾讯云代金券