广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python布尔类型和逻辑运算
  • 162
分享到

python布尔类型和逻辑运算

布尔逻辑类型 2023-01-30 23:01:29 162人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

布尔类型 python中True表示真,False表示假,它们是布尔类型: >>> type(True) <class 'bool'> 在Python中,bool的True和False是数值1和0的字符串表示

布尔类型

python中True表示真,False表示假,它们是布尔类型:

>>> type(True)
<class 'bool'>

Python中,bool的True和False是数值1和0的字符串表示格式,实际上bool类型是int类型的一个子类

>>> bool.__bases__
(<class 'int'>,)

因为True/False是数值1和0的另一种表示方式,它们可以直接参与数值运算。

>>> True + 2
3
>>> False + 2 - 1
1

True/False的各种形式

虽然True代表1,False代表0。但实际上,python中的任何一个数据对象要么是True,要么是False,所以可以直接在布尔测试的表达式中使用,而并非一定要去大小比较、通过函数测试等等。比如:

if "a":
while 1:

可以通过bool()函数来测试数据对象、表达式是True还是False。例如:

>>> bool(0)
False
>>> bool(1)
True
>>> bool('a')
True
>>> bool('')
False

那么,哪些类型的数据是True,哪些类型的数据是False?

  • 整数值0、浮点数值0.0等、空字符串都为假
  • None为假
  • 空数据对象都是假,比如[]{}()
    • 注意,元组的括号和逗号的特殊性。例如(())(None)(1)这些都不是元组,而是单个数据对象,加上逗号才算是元组。所以,使用括号包围但却不是元组的数据,如果它们是假,则整个返回假,而不是元组看上去不为空而返回真

以下是各种内置数据类型的一些真、假示例:

          True                 False
        ----------------------------------
number:   1、1.1               0、0.0
string:   'a'                  ''
None:                          None
list:     ['a']、[1]           []
       [0]、['']、[None]
Set/Dict: {'a'}                {}
tuple:    ('a')、(1)           ()、('')、(0)、(None)

看几个示例:

>>> bool(1), bool(0)
(True, False)

>>> bool('a'), bool('')
(True, False)

>>> bool(None)
False

>>> bool(['a']), bool([1]), bool([]), bool(['']), bool([()])
(True, True, False, True, True)

>>> bool({'a'}), bool({}), bool({''})
(True, False, True)

>>> bool(('a')), bool(()), bool(('')), bool((0)), bool(({}))
(True, False, False, False, False)

>>> bool(((),)),bool((None,))
(True, True)

实际上,一个数据对象是真还是假,是根据这个类型的__bool__()的返回值(为False则为假)以及__len__()的返回值(为0则为假)来决定的。

None

None为假,它不是表示对象为空,也不是表示对象未定义。它自身就是一个实实在在的数据对象,在内存中有自己的内存地址,而且整个python全局只有一个唯一的None对象。可以认为,None是一种特殊的数据对象,像数值1、字符串'a'一样,只不过内存中这个数据对象里面存储的数据是我们不得而知的,但它永远表示为False

>>> a = None
>>> b = None
>>> a is b
True

在Python中,没有显式定义return语句的函数、方法并不意味着没有返回值,它们的默认返回值是None。比如print()函数:

>>> a=print("aa")
aa
>>> print(a)
None

None有时候有些小技巧。比如,访问或设置超出列表长度的元素时会报错:

>>> S = []
>>> S[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> S[1] = 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

但是可以预先将某些数量的None对象填充到列表中去,这样列表就具备了元素,尽管它们都是None对象。

例如,向列表中填充10个None元素:

>>> S = [None] * 10
>>> S
[None, None, None, None, None, None, None, None, None, None]
>>> S[1]
>>> S[1] = 2
>>> S
[None, 2, None, None, None, None, None, None, None, None]

当然,将None换成其它数据也一样可以,比如0,但用None来填充,一看就知道是为了填充而填充的占位符,不是实际要操作的元素。

另外,预先填充并不能限制列表的长度,可以继续向这个列表中append()新元素。

逻辑运算:and、or、not

python中只支持字符形式的and、or、not逻辑运算,不支持符号类型的&&、||、!

  • X and Y:X和Y都为真时,返回真
  • X or Y:X或Y为真,返回真
  • not X:X真假取反
    • not优先级很低,所以not a == b等价于not (a == b)

需要注意,and和or会短路运算(即只要能确定真假关系,就立即停止运算),并返回运算的结果(不是返回True/False,而是返回表达式的运算结果)。而not运算是返回True/False的。

例如,and的逻辑运算:

>>> 2 and 3, 3 and 2
(3, 2)
>>> [] and {}
[]
>>> 3 and []
[]

上面第一行and测试,因为and左边的都是True,所以必须得评估and右边的值,那么不管and右边是True还是False,都会返回and右边的值,比如第一行and测试,第三行and测试。第二行and测试中,因为and左边为False,所以直接能确定为False,所以直接短路返回[]

再看or逻辑运算:

>>> 2 or 3,3 or 2
(2, 3)
>>> [] or 3
3
>>> [] or {}
{}

上面第一行or测试,因为or左边已经能直接确定为True,所以直接短路返回or左边的值。第二行和第三行or测试,因为or左边都为False,所以必须测试右边的,所以不管or右边是True还是False,都返回or右边的值。

再次说明,and、or返回的不是True/False的布尔值,而是逻辑表达式的运算结果。但因为python中只要是数据,要么是True,要么是False,所以and/or/not都可以用于真假测试,只不过and/or还可以在布尔测试的基础上进行赋值操作。

例如,如果变量a为False,就赋值为某个值,否则采用a原有的值。

a = a or "hhhh"

更通用的,变量A取X、Y、Z等表达式中的一个。

A = X or Y
A = X or Y or Z

不仅如此,and/or还能实现if中选择值的功能。例如,下面是等价的:

A = (( X and Y) or Z)

if X:
  A = Y
else:
  A = Z

当然,这种用and/or实现逻辑的可读性太差,能用if的当然用if。

空、非空测试的建议

经常会遇到要测试数据是否为空。这里的空可能是None、""、[]、{}、()中的一种,建议不要使用len() == 0去测试:

if len(x) == 0:
if not len(x) == 0:

而是直接将数据作为真、假值进行判断:

if x:
if not x:

--结束END--

本文标题: python布尔类型和逻辑运算

本文链接: https://www.lsjlt.com/news/180487.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python布尔类型和逻辑运算
    布尔类型 python中True表示真,False表示假,它们是布尔类型: >>> type(True) <class 'bool'> 在python中,bool的True和False是数值1和0的字符串表示...
    99+
    2023-01-30
    布尔 逻辑 类型
  • Axure布尔逻辑运算位置在哪
    今天小编给大家分享一下Axure布尔逻辑运算位置在哪的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Axure布尔逻辑运算位置...
    99+
    2023-07-06
  • shell布尔运算符与逻辑运算符有哪些
    本篇内容介绍了“shell布尔运算符与逻辑运算符有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!布尔运算符下面列出了常用的布尔运算符,假...
    99+
    2023-06-27
  • Python的布尔类型运算方法有哪些
    本篇内容介绍了“Python的布尔类型运算方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python支持布尔类型的数据,布尔类型只...
    99+
    2023-06-02
  • 【Python入门】Python的判断语句(布尔类型和比较运算符)
    前言 📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本...
    99+
    2023-09-06
    numpy python 经验分享
  • Python学习-比较运算符和逻辑运算符
    比较运算符   ==  等于 - 比较对象是否相等 print(3 == 4); //False   !=  不等于 - 比较两个对象是否不相等 print(3 != 4); // True     <>...
    99+
    2023-01-30
    运算符 逻辑 Python
  • 【Python入门篇】——Python中判断语句(布尔类型,比较运算符,if语句)
    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选...
    99+
    2023-09-05
    python 开发语言 数据结构
  • python中and和or逻辑运算符的用法示例
    目录一、概述二、用法说明(一)and 用法(二)or 用法三、两个集合and 和or操作的时候的问题四、优先级问题(and > or)附:python中if语句and和or用法...
    99+
    2022-11-12
  • 如何理解Python中 and 和 or 运算短路逻辑
    本篇文章为大家展示了如何理解Python中 and 和 or 运算短路逻辑,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。短路逻辑规则如下:表达式从左至右运算,若 or 的左侧逻辑值为 True ,则...
    99+
    2023-06-01
  • python中and和or逻辑运算符的示例分析
    这篇文章给大家介绍python中and和or逻辑运算符的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、概述python中的逻辑操作符and 和or,也叫惰性求值,由于是惰性,只要确定了值就不往后解析代码了。...
    99+
    2023-06-26
  • 浅谈Python实现opencv之图片色素的数值运算和逻辑运算
    数值运算 代码: # -*- coding=GBK -*- import cv2 as cv # 数值运算:加减乘除 def shu_image(src11, src22...
    99+
    2022-11-12
  • python变量数据类型和运算符
    目录1 数据类型1.1 基础类型1.2 类型判断2. 运算符和表达式2.1 算术运算符2.2 模运算说明2.3 数学函数2.4 随机函数2.5 赋值运算符2.6 关系运算2.7 逻辑...
    99+
    2022-11-11
  • Python学习笔记之字典,元组,布尔类型和读写文件
    目录1.字典dict1.1列表和字典的区别1.2字典示例1.3练习:写中国省份与省份缩写对应的字母代码2.元组tuple3.布尔类型bool4.读写文件4.1用命令做一个编辑器4.2...
    99+
    2022-11-13
  • python变量数据类型和运算符怎么使用
    1 数据类型不同类型的变量可以进行的运算是不同的,所以必须理解变量的类型,python中数据类型可以分为:内置类型:数值类型:整型int,浮点型float,复数(complex) 3+5jstr:字符串bool:布尔值【True,False...
    99+
    2023-05-14
    Python
  • python变量数据类型和运算符如何使用
    本篇内容介绍了“python变量数据类型和运算符如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 数据类型不同类型的变量可以进行的运...
    99+
    2023-07-06
  • 把你的 Python 技能从 “Hello World“ 升级到 “万能钥匙“:掌握 Python 的输出、输入、数据类型转换和运算符!
    前言 这篇文章我将为大家分享 python 的输出、输入、数据类型的转换和运算符 相关的知识。如果大家也想跟着博主一起学习 python ,欢迎订阅专栏哦python学习😊 输出 我...
    99+
    2023-09-16
    python 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作