python三元运算符实现方法

yipeiwu_com7年前Python基础

这是今天在温习lambda表达式的时候想到的问题,众所周知C系列语言中的 三元运算符(?:)是一个非常好用的语句,

关于C中的三元运算符

表达式1?表达式2:表达式3

那么在python应该如何实现呢,请看下面例子:

答案是:X = (表达式1)and 表达式2(真值返回)or 表达式3(假值返回)

举个例子:

复制代码 代码如下:

def main():
    y = 5
    x = (y > 5) and 2 or 4
    print x
    pass

这段代码的是意思的输出是4,可以把表达式的条件改为(y<=5)这时候输出就是2

为什么能得到这样的结果:

0、''、[]、()、{}、None在布尔上下文中为假;其它任何东西都为真。
在Python中,and和or执行布尔逻辑演算,但是它们并不返回布尔值;而是,返回它们实际进行比较的值之一。
如果布尔上下文中的所有值都为真,那么and返回最后一个值。上下文中的某个值为假,则and返回第一个假值。
如果有一个值为真,or立刻返回该值。如果所有的值都为假,or返回最后一个假值
基于上述的背景,你应该还能理解这个表达式的含义了吧。

“注:“里面应该是这个用法的一些缺陷,如果表达式2或3是几个定义的假值(0、''、[]、()、{}、None)之一,就会影响判断了,我的建议是吧这些假值都用字符串的形式表现,并且将“”特殊处理为“”。后续再做判断

再次见识到Python的强大,如果您有什么见解欢迎评论。

后记:

最近看了一些文章,有位大神对这个问题对这个缺陷给了一个完美的解决方案

X=(表达式1)and[表达式2(真值返)]or[表达式3(假值返回)](注:表达式2以及表达3不能为0、''、[]、()、{}、None)

对表达式2,3用中括号括起来,这样两者的值将永远不会为假,这个解决方案的确不错。

相关文章

PyQt5每天必学之拖放事件

PyQt5每天必学之拖放事件

在PyQt5教程的这一部分,我们将讨论拖放操作。 在电脑图形用户界面,拖放事件就是点击一个虚拟对象,并将其拖动到其他位置或到另一个虚拟物体的动作。在一般情况下,它可以被用于调用多种动作,...

Django网络框架之HelloDjango项目创建教程

Django网络框架之HelloDjango项目创建教程

本文实例讲述了Django网络框架之HelloDjango项目。分享给大家供大家参考,具体如下: 这里将带你从零开始创建一个Django项目,包含完整的MTV架构、创建子应用,及访问静态...

利用Python的sympy包求解一元三次方程示例

环境说明:Python3.7.2+Jupyter Notebook 示例1(求解一元三次方程): import sympy as sp # 导入sympy包 x = sp.Symb...

python暴力解压rar加密文件过程详解

第一次使用csdn写文章,写得不好还请见谅。(运行环境:python3.6) 下了一个带密码的压缩包文件,作为一个刚学python的新手,想着能不能用python暴力破解它,于是在网上...

Python文件读取的3种方法及路径转义

1.文件的读取和显示 方法1: 复制代码 代码如下:  f=open(r'G:\2.txt')  print f.read()  f.close() 方法...