2.3 解释一下python的 and-or 语法

2024-06-18 18:08
文章标签 python 语法 2.3 解释一下

本文主要是介绍2.3 解释一下python的 and-or 语法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

So:

python 的and-or语法 bool and a or b

就相当于bool? a: b

但是特殊情况是,若a为假,则不会相当于,而是返回b

解决办法:用 (bool and [a] or [b])[0]代替

当然,负责人的话,就将

(bool and [a] or [b])[0]封装成一个函数啦~

一、http://www.kuqin.com/diveinto_python_document/apihelper_andor.html

如果你是一名C语言高手,当然对 bool ? a : b 表达式熟悉,这个表达式当 bool 为真时计算为 a,其它值则为 b。象很多编程技巧一样,它是一种诱人的便利。你可在Python中完成同样的事情,但是需要完全理解它是如何工作的,以避免不明显的毛病。

例 2.17. and-or 技巧

>>> a = "first">>> b = "second">>> 1 and a or b 1'first'>>> 0 and a or b 2'second'
1

这个语法看起来与C语言中的 bool ? a : b 相似。第一部分将在布尔环境中进行计算,它可以是任意Python表达式。如果计算为真,整个表达式的值为 a

2如果第一部分计算为假,整个表达示的值为 b

然而,因为这个Python表达式是简单的布尔逻辑,而不是一个特殊的语言结构,所以在这个Python的 and-or 技巧与C中的 bool ? a : b 语法之间,有一个非常,非常,非常重要的不同。如果 a 的值为假,表达式将不会按你期望的那样执行。(你能知道我被这个问题折腾过吗?不只一次?)

例 2.18. 何时 and-or 技巧失败

>>> a = "">>> b = "second">>> 1 and a or b'second'

因为 a 是一个空串,空串在一个布尔环境中被Python看成假值,这个表达式将“失败”,且返回 b 的值。如果你不将它想象成象 bool ? a : b 一样的语法,而把它看成纯粹的布尔逻辑,这样的话就会得到正确的理解。 1 是真,a 是假,所以 1 and a 是假。假 or b 是b

Important
这个 and-or 技巧,bool and a or b,当 a 为假时,不会象C表达式 bool ? a : b 一样工作。

The real trick behind the and-or trick, then, is to make sure that the value of a is never false. One common way of doing this is to turn a into [a] and b into [b], then taking the first element of the returned list, which will be eithera or b.

Example 2.19. Using the and-or trick safely

>>> a = "">>> b = "second">>> (1 and [a] or [b])[0]''

因为 [a] 是一个非空列表,它永远不会为假。甚至 a 是 0 或 '' 或其它假值,列表 [a] 为真,因为它有一个元素。

到现在为止,这个技巧可能看上去问题超过了它的价值。毕竟你可以用一个 if 语句完成相同的事情,那么为什么要经受这些麻烦呢?哦,在很多情况下,要在两个常量之间进行选择,所以可以使用更简单的语法而不必担心,因为你知道 a 值将总是真。并且尽管你不得不使用更复杂的安全形式,也有一些好的理由来使用这个技巧;在Python中有很多时候, if 语句不允许使用,这一点我们将在下一节看到。

Note
一个负责的程序员应该将 and-or 技巧封装成一个函数:
def choose(bool, a, b):return (bool and [a] or [b])[0]

二、http://www.jb51.net/article/64056.htm

一、and:

在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值;而是,返回它们实际进行比较的值之一。

复制代码 代码如下:

>>> 'a' and 'b' 'b' >>> '' and 'b' '' >>> 'a' and 'b' and 'c' 'c'

在布尔上下文中从左到右演算表达式的值,如果布尔上下文中的所有值都为真,那么 and 返回最后一个值。

如果布尔上下文中的某个值为假,则 and 返回第一个假值

二、or:

复制代码 代码如下:

>>> 'a' or 'b' 'a' >>> '' or 'b' 'b' >>> '' or [] or {}
{} >>> 0 or 'a' or 'c' 'a'
[code]
使用 or 时,在布尔上下文中从左到右演算值,就像 and 一样。如果有一个值为真,or 立刻返回该值

如果所有的值都为假,or 返回最后一个假值

注意 or 在布尔上下文中会一直进行表达式演算直到找到第一个真值,然后就会忽略剩余的比较值

三、and-or:

and-or 结合了前面的两种语法,推理即可。

[code]
>>> a='first' >>> b='second' >>> 1 and a or b 'first' >>> (1 and a) or b 'first' >>> 0 and a or b 'second' >>> (0 and a) or b 'second' >>> 


这个语法看起来类似于 C 语言中的 bool ? a : b 表达式。整个表达式从左到右进行演算,所以先进行 and 表达式的演算。 1 and 'first' 演算值为 'first',然后 'first' or 'second' 的演算值为 'first'。

0 and 'first' 演算值为 False,然后 0 or 'second' 演算值为 'second'。

and-or主要是用来模仿 三目运算符 bool?a:b的,即当表达式bool为真,则取a否则取b。

and-or 技巧,bool and a or b 表达式,当 a 在布尔上下文中的值为假时,不会像 C 语言表达式 bool ? a : b 那样工作。

四、安全使用and-or

复制代码 代码如下:

>>> a="" >>> b="second" >>> (1 and [a] or [b])
[''] >>> (1 and [a] or [b])[0] '' >>> 

由于 [a] 是一个非空列表,所以它决不会为假。即使 a 是 0 或者 '' 或者其它假值,列表 [a] 也为真,因为它有一个元素。

一个负责的程序员应该将 and-or 技巧封装成一个函数:

复制代码 代码如下:

def choose(bool,a,b): return (bool and [a] or [b])[0] print choose(1,'','second') #''


这篇关于2.3 解释一下python的 and-or 语法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072728

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板