python 的逻辑值及其运算(python中逻辑量有哪些)

liftword19小时前技术文章4

概述

bool 是 python 内建数据类型,其取值只有 TrueFalse;python 的逻辑运算符有 notandor

看上去很简单,所以当我第一次看到下面的代码时我是懵逼的

id = item.get('id') or ''

作为一个主要使用 Java 的程序员来说,只有逻辑类型的变量才可以使用逻辑运算符,已经成了思维定式,对于 python,这些思维定式反而成了障碍

python 逻辑判断

python 的所有变量都可以进行逻辑比较,其中,如下变量的 bool 值总是 False

0, 0.0, [], {}, (), "", '', None, False

如何理解这个结论呢?

  • None:总是 False,这是 python 语言特性
  • 数值:对于数值 n,如果 n==0,那么 n 的 bool 值就是 False,反之为 True
  • 对于集合/字符串/或其他类型 x,如果 len(x)==0,那么 x 的 bool 值就是 False,反之为 True
  • 对于方法,其 bool 值总是 True,所以一定要注意,在逻辑表达式里不要忽略了方法的括号
  • 自定义的类,其实例对象的 bool 值总是 True,如果想要改变,可以实现如下方法
    • __bool__()
    • __len__()
    • 如果同时存在 __bool__()__len__(),则 __bool()__ 优先

python 的 or 和 and 运算符

回到本文的开头,来看下 or 运算符

首先要明确一点:python 的 or 并不保证只返回 bool 值,即 TrueFalse

or 运算有个短路特性,即遇到第一个 True 时就可以返回,不需要计算后续的表达式,而且它返回的是第一个为 True 的变量,并不一定是 True,比如说 1 也是 True,那么返回的就是 1,示例如下

>>> 0 or 1 or None or True
1

如果 or 没有发生短路,即计算到最后一个值还是没有遇到 True,那么会返回这最后的一个值,所以本文最初的代码,其含义如下

# 如果 item.id 是 None,则 id 值为 ''
id = item.get('id') or ''

这相当于给 id 一个默认值 '' 来避免其值为 None,因为对应的数据库字段可能不允许为 null

同样的,and 也有短路特性,它遇到第一个 False 就可以返回对应的变量,或者返回最后一个变量,示例如下

>>> 1 and {'x':1} and [] and True
[]

>>> 1 and True and [1,2] and [3,4]
[3, 4]

python 的 not

not 就比较特殊了,它返回的是 bool 值,即 TrueFalse,示例如下

>>> not None
True
>>> not 100
False
>>> not [1]
False
>>> not {}
True

python 方法参与逻辑运算

python 的方法本身也是对象,可以赋值给变量

前面已经说了,方法的 bool 值总是 True,所以要小心,忘记给方法写上括号是会导致奇怪的问题的,排查起来很痛苦,示例如下

# 定义一个方法,总是返回 False
>>> def always_false():
...   return False

# 预期打印出 bad
>>> x = always_false()
>>> if x:
...   print('ok')
... else:
...   print('bad')
...
bad

# 不慎没有写方法后的括号,导致运行错误
>>> x = always_false
>>> if x:
...   print('ok')
... else:
...   print('bad')
...
ok

相关文章

python 判断变量是否是 None 的三种写法

代码中经常会有变量是否为None的判断,有三种主要的写法:第一种是 if x is None ;第二种是 if not x: ;第三种是 if not x is None (这句这样理解更清晰 if...

简单学Python——关键字2——True和False

True和False是Python中的两个关键字,是布尔类型,分别用于表示真和假。1、True和False表示真和假的例子:#将1==2的结果赋值给了x x=1==2 #将1==2的结果赋值给了y y...

Python基础:pass语句知识详解(python中pass)

欢迎你来到站长在线的站长学堂学习Python知识,本文分享的是《pass语句知识详解》。pass的中文翻译:通过;走过;沿某方向前进;向某方向移动;及格;合格;通行证。在Python中表示空的语句,包...

Python的条件判断(python三个条件判断)

计算机之所以能够执行众多自动化任务,关键在于它具备自行进行条件判断的能力。例如,当输入用户年龄后,依据不同的年龄来打印相应内容,在 Python 程序里,这可以通过 if 语句来实现,示例如下:age...

用python编写判断输入是否为整数的程序

最近在自学python,写了两个小程序,大家帮个看看有没有更好的方式来编写,没学过编程,学起来有点懵。想实现一个功能,就是判断外部输入是否为整数,就是判断是不是数字,要是输入的其他的返回“您输入的信息...

python编程实践:如何将变量正确设置为空?

在Python中,变量是非常重要的一部分。它们用于储存数据,来支持程序的运行。当我们在编程时,将来可能会遇到一个问题:如何将变量正确设置为空?什么是变量?在Python中,变量是程序员用来储存数据的一...