今天介绍一个python中的小技巧:and-or

看下面这段代码:技能培训

a="heaven"

b="hell"

c=Trueandaorb

printc

d=Falseandaorb

printd

输出:

heaven

hell

结果很奇怪是不是?

表达式从左往右运算,1和"heaven"做and的结果是"heaven",再与"hell"做or的结果是"heaven";0和"heaven"做and的结果是0,再与"hell"做or的结果是"hell"。

抛开绕人的and和or的逻辑,你只需记住,在一个boolandaorb语句中,当bool条件为真时,结果是a;当bool条件为假时,结果是b。

有学过c/c++的同学应该会发现,技能培训这和bool?a:b表达式很像。

有了它,原本需要一个if-else语句表述的逻辑:

ifa>0:

print"big"

else:

print"small"

就可以直接写成:

print(a>0)and"big"or"small"

然而不幸的是,如果直接这么用,有一天你会踩到坑的。和c语言中的?:表达式不同,这里的andor语句是利用了python中的逻辑运算实现的。当a本身是个假值(如0,"")时,结果就不会像你期望的那样。

比如:

a=""

b="hell"

c=Trueandaorb

printc

得到的结果不是""而是"hell"。因为""和"hell"做and的结果是"hell"。

所以,and-or真正的技巧在于,确保a的值不会为假。最常用的方式是使a成为[a]、b成为[b],然后使用返回值列表的第一个元素:

a=""

b="hell"

c=(Trueand[a]or[b])[0]

printc

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

在两个常量值进行选择时,and-or会让你的代码更简单。但如果你觉得这个技巧带来的副作用已经让你头大了,没关系,用if-else可以做相同的事情。不过在python的某些情况下,你可能没法使用if语句,比如lambda函数中,这时候你可能就需要and-or的帮助了。

什么是lambda函数?呵呵,这是python的高阶玩法,技能培训暂且按住不表,以后有机会再说。

文章来源于Crossin,由课课家

python51课视频_【Python 课堂】第51课—— and-or技巧相关推荐

  1. python爬虫项目实战教学视频_('[Python爬虫]---Python爬虫进阶项目实战视频',)

    爬虫]---Python 爬虫进阶项目实战 1- Python3+Pip环境配置 2- MongoDB环境配置 3- Redis环境配置 4- 4-MySQL的安装 5- 5-Python多版本共存配 ...

  2. python 排课算法_基于遗传算法的排课系统

    摘 要:随着高校的发展,在教务管理系统中使用的排课模型也变得越来越复杂,亟需一种适用于开发.重用及设计的方法.针对这种情况,本文给出了排课问题的数学模型,提出基于遗传算法解决方案.结果表明,该算法能比 ...

  3. 中职计算机英语视频,中职计算机微课视频一等奖(中职英语微课)

    <微课在中职<计算机应用基础>课程中的应用本文是一篇关于计算机应用论文和<计算机应用基础>写作技巧的范文,也是一篇关于微课和中等职业学校论文的范文.[摘要]本文以中职学校 ...

  4. 某中学的排课管理系统_某中学的排课管理系统(SQL的简单应用)

    一.系统分析 需求功能分析 需求分析的任务是调查应用领域,对应用领域中的信息要求和操作要求进行详细分析,形成需求分析说明书.重点是调查,收集与分析用户在数据管理中的信息要求,处理要求,数据的安全性与完 ...

  5. python视频点播系统_精通Python(微课视频版)/Python开发视频点播大系

    目录 第1篇 基础知识 第1章 Python概述 1.1 认识Python 1.1.1 Python的历史 1.1.2 Python的特点 1.1.3 Python的应用 1.2 搭建Python开发 ...

  6. python就业视频_[Python] python就业班 900集 视频学习教

    01基础\* }+ F/ M- b6 v0 x) F( j% S 02Python核心编程\ 03数据结构与算法\5 C0 ~5 l2 x; S# k2 Z" a/ _" {) q ...

  7. python快速爬虫视频_“python怎么快速爬虫视频“python 爬网页视频教程

    用python怎样爬网页 # coding:utf8 import cookielib import urllib2 url = "http://blog.uouo123.com" ...

  8. 初识python 视频_#python day02 初识python 学习视频来源于 太白金星

    #python day02 初识python 学习视频来源于 太白金星 ''' 知识点:安装PyCharm''' # 设置鼠标条件字体大小:file ->settings # 搜索mouse E ...

  9. 熊猫的python小课怎么样_如何评价熊猫小课?

    因为之前有报过熊猫小课的课程,所以我就简单说一下我自己对它的看法吧. 我第一次接触熊猫小课是在18年的3月份.第一个免费课程是时间管理课程.刚开始无论是从它的上课模式,或者说是精彩的内容上讲,我都完全 ...

最新文章

  1. python如何实例化类_Python如何根据类名实例化类
  2. MyEclipse配置DataBase Explorer
  3. Python+Django+Nginx+Uwsgi(史上最全步骤)(亲测)
  4. python网络通信协议_Python网络概述:协议与体系结构的运用
  5. 牛客网-数据结构笔试题目(四)-Powerful Ksenia问题解决方案(附源码)
  6. rc mysql common_RR与RC隔离级别下MySQL不同的加锁解锁方式
  7. SpringAop与AspectJ的联系与区别____比较分析 Spring AOP 和 AspectJ 之间的差别
  8. 【kafka】kafka 查看 GroupCoordinator 以及 kafka Group dead 消费组死掉 以及 GroupCoordinatorRequest 使用
  9. C#图解教程读书笔记(第3章 类型、存储及变量)
  10. 发一个招聘启事,成都有兴趣的朋友可以来看一看。
  11. 从零开始学做微信小程序,看这些就够了!
  12. 数据结构学习笔记(转载)
  13. les有学计算机的吗,赵欢喜
  14. arailsdemo 1
  15. verifycode.php,php验证码|php图片验证码|php image.verifyCode.class.php
  16. C++ primer 5th 习题之10.13
  17. 英文原始文本的读取与处理
  18. 时间序列--残差分析
  19. Ubuntu测试使用速腾RS-Lidar-16
  20. MySQL-语句块-循环语句

热门文章

  1. 吴恩达神经网络和深度学习-学习笔记-23-快速搭建你的第一个系统原型,然后迭代
  2. mac开启docker kubernetes
  3. matlab2c使用c++实现matlab函数系列教程-polyder函数
  4. 事业单位考试高频考点二:经济
  5. 信息论和贝叶斯(或许会继续补充)
  6. Hive 使用问题集锦
  7. 2017-2018-1 20155213 20155303 实验二 固件程序设计
  8. Lua初学习 9-13_04 require moudle
  9. Js面向对象学习之function
  10. [转载] python 等号 重载_python运算符重载2