python布尔测试对象_python布尔类型和逻辑运算

布尔类型

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

2>>> type(True)

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

2>>> bool.__bases__(,)

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

2

3

4>>> True + 23>>> False + 2 - 11

True/False的各种形式

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

2if "a":while 1:

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

2

3

4

5

6

7

8>>> bool(0)

False>>> bool(1)

True>>> bool('a')

True>>> bool('')

False

那么,哪些类型的数据是True,哪些类型的数据是False?整数值0、浮点数值0.0等、空字符串都为假

None为假

空数据对象都是假,比如[]、{}、()等元组比较特殊,如果元组中有元素,但全是为假的元素,则也为假

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

2

3

4

5

6

7

8

9          True                 False

----------------------------------number:   1、1.1               0、0.0string:   'a'                  ''None:                          Nonelist:     ['a']、[1]           []

[0]、['']、[None]

Set/Dict: {'a'}                {}tuple:    ('a')、(1)           ()、('')、(0)、(None)

看几个示例:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17>>> 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)

None

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

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

2

3

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

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

2

3

4

5

6

7

8

9>>> S = []>>> S[1]

Traceback (most recent call last):

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

File "", line 1, in IndexError: list assignment index out of range

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

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

2

3

4

5

6

7>>> 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真假取反

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

例如,and的逻辑运算:1

2

3

4

5

6>>> 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逻辑运算:1

2

3

4

5

6>>> 2 or 3,3 or 2(2, 3)>>> [] or 33>>> [] 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等表达式中的一个。1

2A = X or YA = X or Y or Z

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

2

3

4

5

6A = (( X and Y) or Z)if X:

A = Yelse:

A = Z

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac预装的php路径,Mac使用系统自带php和Apache

最美的语言本文将介绍在Mac环境下如何使用系统本身所带有的Apache(阿帕奇服务器)通过预装的PHP版本来运行PHP的相关代码,相对来讲在OS X系统下相对好配置一些,因为Apache和PHP都预装好了,如果是Windows环境我们需要自己安装ApachePHPMysql(通…

线程池与Callable更配哦

概述 Callable介绍见:http://blog.csdn.net/zengmingen/article/details/53288119 多线程介绍见:http://blog.csdn.net/zengmingen/article/details/53284999 代码 TaskCallable.javapackage multithreading.pool;import java.util.concurrent.Callabl…

IP编址,IP地址介绍与子网划分方法

网络层位于数据链路层与传输层之间。网络层中包含了许多协议,其中最为重要的协议就是IP协议。网络层提供了IP路由功能。理解IP路由除了要熟悉IP协议的工作机制之外,还必须理解IP编址以及如何合理地使用IP地址来设计网络。 上层协议类型 以太网帧中的Typ…

3- OpenCV+TensorFlow 入门人工智能图像处理-TensorFlow入门

tensorflow基础入门 思考一个问题: 如何刚好学习TensorFlow 类比为一门开发语言,学会语法,api的调用, 原理性掌握。语言的要素: 基础数据类型 运算符 流程 字典 数组 import tensorflow as tf# 常量,指定数据类型 data1 tf.const…

r 函数返回多个值_第四讲 R描述性统计分析

在“R与生物统计专题”中,我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现。以从浅入深,层层递进的形式在投必得医学公众号更新。在上一讲中,我们介绍了第三讲 R编程基础-矩阵和数据框 (戳这里即可跳转)。到现在为止,大…

python双线性插值函数_双线性插值法原理 python实现

码字不易,如果此文对你有所帮助,请帮忙点赞,感谢!一. 双线性插值法原理:① 何为线性插值?插值就是在两个数之间插入一个数,线性插值原理图如下:在位置 x 进行线性插值,插…

张恩民 php,php100教程_php100张恩民php视频 56课时_网站编程_寂涯网络学习基地

1、PHP基本语法和数据类型:(1)、PHP基本语法:1、htm 和 php 混编2、一个语句以 ; (分号结束)3、如何定义一个变量,和变量的使用(2)、PHP数据运算类型四种标量类型:boolean(布尔型)integer(整型)float(浮点型,也作“do…

Oracle 自带sqldeveloper导入数据到表

步骤 1、建一张字段名和类型与要导入数据一致的表。 2、如果是excel文件,另存为 csv文件。 因为excel文件遇到空格会报错,excel文件太大工具会读取文件失败。 而csv文件是秒级读取,有空格也会导入不会报错。 ------------- 更多的Java&am…

百度腾讯中兴华为全部入局Linux Foundation深度学习基金会

2019独角兽企业重金招聘Python工程师标准>>> 虽然名字叫做Linux Foundation,但是这家基金会关注的领域并不局限在Linux操作系统领域。事实上,Linux Foundation基金会还为很多其他开源基金和项目提供支持,比如Cloud Foundry、Autom…

python判断点在矩形内_判断平面内矩形和圆是否有交点的python实现

#! /usr/bin/env python# -*- coding: utf-8 -*-filename : 平面坐标内矩形与圆是否相交usage :authors : U{peterguo}copyright: tencentdate : 2012.08.21version : 1.0.0.0Modified History:2012.08.21 创建import osimport sysimport reimport urllib2import timeimport da…

python读取mysql数据库_Python操作MySQL数据库9个实用实例

在Windows平台上安装mysql模块用于Python开发 用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示。下边是打包了32与64版本。 MySQL-python-1.2.3.win32-py2.7.exe MySQL-python-1.2.3.win-amd64-py2.7.exe 实例 1、取得 MYSQL 的版本 #…

win主机上搭建php网站运行环境,Windows server 2008搭建php运行环境图文详解(php5.3)

这篇文章主要为大家分享下Windows server 2008搭建php运行环境的步骤,需要的朋友可以参考下下载php组件包首先到http://windows.php.net/download/下载你需要的php版本,这里我下载的是php5.3。下面解压php组件 包到磁盘上。安装Microsoft Visual C 2008 …

python 登陆微博 被删除 token_爬取微博信息,使用了cookie仍然无法登录微博

按照网上的模板自己写了类似的代码爬取微博,可是response回来的html是登录界面的html,应该是没有成功登陆微博,但是和网上的代码是基本一样的from bs4 import BeautifulSoupimport pandas as pdimport requestsurl "https://weibo.cn/2…

plsql developer连接oracle--本地不安装oracle

工具 数据库开发程序 PLSQL Developer oracle 客户端 instantclient,点击下载 (下载与oracle相同版本或最新版本,如果 PLSQL Developer是32位,则要下载32位的)安装 1、解压oracle客户端 到盘某个目录。我的目录是C:\or…

ubuntu networking 与 network-manager

刚遇到的坑,因为操作不当导致网络中断,于是手动配置了/etc/network/interfaces , 修复了系统之后发现ubuntu-desktop中的有线链接不见了,百度了一下说是networking服务和network-manger服务会起冲突。 【Server版本】 在UbuntuServer版本中&…

mysql 升序_mysql 的 查找 与 排序

mysql 的 查找 &#xff1a;SELECT name,age FROM mytable; # 在mytable 中所有的name,age 数据SELECT name,age FROM mytable WHERE age>25; #在mytable 中所有的name,age 数据&#xff0c;其中age必须小于25SELECT name,age FROM mytable WHERE age<25 OR age>30; #…

Hadoop3.0的新特性

转载&#xff1a;http://blog.csdn.net/sinat_31726559/article/details/52103229 点击阅读原文 -------------------------------------- 1. Hadoop3.0简介 Hadoop 2.0是基于JDK 1.7开发的&#xff0c;而JDK 1.7在2015年4月已停止更新&#xff0c;这直接迫使Hadoop社区基于…

python torch exp_学习Pytorch过程遇到的坑(持续更新中)

1. 关于单机多卡的处理&#xff1a;在pytorch官网上有一个简单的示例&#xff1a;函数使用为&#xff1a;torch.nn.DataParallel(model, deviceids, outputdevice, dim)关键的在于model、device_ids这两个参数。DATA PARALLELISM​pytorch.org但是官网的例子中没有讲到一个核心…

php 读文件返回字符串,PHP:file_get_contents('php:// input')返回JSON消息的字符串...

我正在尝试在我的PHP应用程序中读取JSON消息&#xff0c;这是我的php代码&#xff1a;$json file_get_contents(php://input);$obj json_decode($json, TRUE);echo $obj->{S3URL};当我这样做时&#xff0c;出现以下错误&#xff1a;Trying to get property of non-object …

Android中ListView数据使用sAdapter.notifyDataSetChanged();方法不刷新的问题

原文链接&#xff1a;http://blog.csdn.net/caihongdao123/article/details/51513410 点击阅读原文 ------------------------- 1.涉及到数据库 当要动态显示更数据库改动&#xff0c;相信大家应该都用过notifyDataSetChanged();. 例如&#xff1a; ...... …