Python中3元运算符的实现
这是今天在温习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用中括号括起来,这样两者的值将永远不会为假,这个解决方案的确不错。
Python中3元运算符的实现的更多相关文章
- Python中的元祖Tuple
Python中的元祖和list基本上一样 tuple = () # 表示一个空的元祖 tuple = (50, ) # 元组中只有一个元素的时候,必须在后面加上逗号 无关闭分隔符 任意无符号的对象,以 ...
- Python中的元类(metaclass)
推荐+收藏:深刻理解Python中的元类(metaclass) 做一些笔记学习学习: 在大多数编程语言中,类就是用来描述如何生成一个对象的代码段,在Python中类也是一个对象,这个(类)对象自身拥有 ...
- Python中的三元运算符
Python中的三元运算符 对于如下需求: if var1>1 : goal = "执行表达式1" else: goal = "执行表达式2" 1.在其他 ...
- [转]深刻理解Python中的元类(metaclass)以及元类实现单例模式
使用元类 深刻理解Python中的元类(metaclass)以及元类实现单例模式 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩:在看python cookbook中关于元类创建单例 ...
- 深刻理解Python中的元类metaclass(转)
本文由 伯乐在线 - bigship 翻译 英文出处:stackoverflow 译文:http://blog.jobbole.com/21351/ 译注:这是一篇在Stack overflow上很热 ...
- 深刻理解Python中的元类(metaclass)
译注:这是一篇在Stack overflow上很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉得 ...
- [转] 深刻理解Python中的元类(metaclass)
非常详细的一篇深入讲解Python中metaclass的文章,感谢伯乐在线-bigship翻译及作者,转载收藏. 本文由 伯乐在线 - bigship 翻译.未经许可,禁止转载!英文出处:stacko ...
- Python中的算数运算符
算数运算符 计算机,顾名思义就是负责进行 数学计算 并且 存储计算结果 的电子设备 目标 算术运算符的基本使用 01. 算数运算符 算数运算符是 运算符的一种 是完成基本的算术运算使用的符号,用来处理 ...
- python中面向对象元类的自定义用法
面向对象中的常用方法 1.instance 和 issubclass instance :判断两个对象是不是一类 issubclass :判断某个类是不是另一个类的子类 #两个常用方法的使用 clas ...
随机推荐
- 并发编程系列小结(线程安全,synchronized,脏读,线程间的通信wait/notify,线程的三种实现方式Demo,可替代wait/notify的方法)
线程安全: 当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法就是线程安全的) synchronized: 可以在任意对象或方法上加锁,而加锁的这段代码称为 ...
- Maven版本的ssm框架项目常见依赖pom.xml
<properties> <junit.version>4.12</junit.version> <spring.version>4.3.1.RELEA ...
- meta文件是什么东西
meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name和 ...
- JRE与JVM、JDK的区别
JRE与JVM.JDK的区别 一. 详细介绍1.JVM -- java virtual machine JVM就是我们常说的java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程 ...
- Linux打包解压
tar tar命令可以用来压缩打包单文件.多个文件.单个目录.多个目录. 常用格式: 单个文件压缩打包: tar czvf my.tar file1 多个文件压缩打包: tar czvf my.tar ...
- 算法笔记_159:算法提高 第二大整数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 编写一个程序,读入一组整数(不超过20个),当用户输入0时,表示输入结束.然后程序将从这组整数中,把第二大的那个整数找出来,并把它打印出来 ...
- Reading assignments in science
First, get a perspective: Review the assignment in the syllabus and any handouts (1-2 minutes)Maybe ...
- Eclipse Debug 使用
Eclipse的debug模式:代码调试 * Eclipse或MyEclipse就是java的开发工具 * Eclipse开源的.免费的Java开发工具 * MyEclipse基于Eclipse开 ...
- Linux-进程基础
计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存中寻找到某个地址等等.这些最基础的计算机动作被称为指令 (instruction).所谓的程序(program),就是这样一系列 ...
- AnjularJS小项目,小案例,练手,猜数字
之前自己就学了点AnjularJS,都是在菜鸟教程里面将基础的只是大致过了一遍,没怎么自己动手做什么东西练练手,但还是觉得纸上得来终觉浅,得知此事要躬行啊,今天就做了个猜数字的小游戏,觉得效果还不错, ...