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中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编