Python编程一定要注意的那些“坑”(九):0与False

问题描述:在编程时,经常需要单独编写一个函数用来判断某个事件是否成立,如果成立就返回正常结果,否则返回False。在主调函数中根据被调函数的返回值决定下一步的操作。这在大多数情况下是没问题的,但是有时候会引起麻烦,并且这样的“坑”一旦掉进去很难爬出来。

问题模拟:使用顺序查找的方法,查找列表中是否存在某个值,若存在则输出其下标,否则输出"not exist."

上面这段代码的结果是正确的,但是有隐患,严格来说代码本身就是错误的,所以会在某些特殊情况下表现不稳定。

下面这样写还是不行:

问题根源:列表、元组、字符串的下标是从0开始的。另外,在Python中,作为值来使用的时候,0和False是等价的。有图为证:

那么,应该怎么写呢?

如果被调函数可能会返回False的话,在主调函数中尽量不要使用隐式的条件表达式,而使用关键字is或者is not来显式判断返回值是否为False。

这样做可行的原因是:0有时候可以看作False,有时候不能看作False,而False永远都是False。

然而,除非非常确定使用False作为返回值不会引起歧义,在函数中如果不符合条件更建议返回None,这样的话掉进坑里的概率就小很多了。

思考题:在本文模拟的问题中,使用return -1代替return None是个好习惯吗?为什么?

2)《Python可以这样学》(2018年2月第5次印刷)(本书已发行繁体版)

出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-

Python中一定要注意的那些“坑”(三)

Python编程中一定要注意的那些“坑”(二)

Python编程中一定要注意的那些“坑”(一)

Python函数默认值参数的2个坑

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2018-06-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后端技术探索

从头到尾解析Hash 表算法

问题描述 百度面试题: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记...

1504
来自专栏数据结构与算法

1487 大批整数排序

个人博客:doubleq.win 1487 大批整数排序  时间限制: 3 s  空间限制: 16000 KB  题目等级 : 黄金 Gold 题解 题目描述 ...

2926
来自专栏数说工作室

统计师的Python日记【第九天:正则表达式】

本文是【统计师的Python日记】第9天的日记 回顾一下: 第1天学习了Python的基本页面、操作,以及几种主要的容器类型。 第2天学习了python的函数、...

4834
来自专栏数据结构与算法

1487 大批整数排序

个人博客:doubleq.win 1487 大批整数排序  时间限制: 3 s  空间限制: 16000 KB  题目等级 : 黄金 Gold 题解 题目描述 ...

2795
来自专栏web编程技术分享

JavaScript: 零基础轻松学闭包(1)

1995
来自专栏aCloudDeveloper

string 之 strchr函数 和 strstr函数(BF算法和KMP算法的应用)

Author: bakari  Date: 2012/8/9 继上篇。。。。。 下面是我写的代码与源码作的一些比较,均已严格测试通过,分别以“string 之”...

2689
来自专栏CDA数据分析师

除了冒泡排序,你知道Python内建的排序算法吗?

Timsort 是一种对真实数据非常有效的排序算法。Tim Peters 在 2001 年为 Python 编程语言创造了 Timsort。Timsort 首先...

1002
来自专栏风中追风

高效编程之hashmap你必须要懂的知识点

以前看Java的招聘要求:Java基础扎实,熟悉常用集合类,多线程,IO,网络编程,经常会疑惑,集合类不就ArrayList,HashMap会用,熟悉下API不...

3566
来自专栏决胜机器学习

有趣的算法(九) ——蛇形数组

有趣的算法(九)——蛇形数组 (原创内容,转载请注明来源,谢谢) 一、问题阐述 给定一个数字,需要返回的内容如下图所示: 输入5,得到结果: ? 输入10,得到...

3289
来自专栏工科狗和生物喵

【计算机本科补全计划】C++ Primer 第二章 【变量和基本类型】

正文之前 C++的数据类型包括 算术类型(int double等)和空类型(void),今天发生了一些很可怕的事情,详情请看正文之后!!我好害怕!! 正文 1、...

38911

扫码关注云+社区

领取腾讯云代金券