Effective Python - 函数

Effective Python - 函数

14.尽量用异常来表示特殊情况,而不要返回None

(1)如果令函数返回None来表示一些特殊意义,调用者很容易写出错误的代码,因为None,0,空字符串,空列表一类值,在条件表达式中会被判定为False。

def divide(x, y):
    try:
        return x / y
    except ZeroDivisionError:
        return None

res1 = divide(0, 3)
res2 = divide(3, 0)

if not res1:
    print(‘invalid input‘) #invalid input

if not res2:
    print(‘invalid input‘) #invalid input

说明:我们一般不会去判定函数的返回值是否为None,而是去假定:只要函数返回了与False等效的运算结果,就说明函数出错。

(2)函数在遇到特殊情况下应抛出异常,并在函数文档中添加相应的描述,不应返回None;

调用者在看到函数文档中关于异常的描述后,会编写相应的代码来处理它们。

def divide(x, y):
    try:
        return x / y
    except ZeroDivisionError as e:
        raise ValueError(‘invalid inputs‘) from e

说明:不返回None,而是把异常抛给上一级,使调用者必须应对它;

将ZeroDivisionError转化成ValueError用以表示调用者输入的值是无效的。

还有一种方法:把返回值拆成两部分放到元组里

def divide(x, y):
    try:
        return True, x / y
    except ZeroDivisionError:
        return False, None

success, res = divide(3, 0)
if not success:
    print(‘invalid input‘) #invalid input

但是这种方法存在一个问题,调用者可以通过下划线为名称的变量跳过元组的第一部分。

(python习惯用下划线来表示用不到的变量)

这和直接返回None有着相同的错误,所以并不推荐这种写法。

_, res = divide(0, 3)
if not res:
    print(‘invalid input‘) #invalid input

原文地址:https://www.cnblogs.com/marton/p/10977433.html

时间: 2024-08-08 17:19:01

Effective Python - 函数的相关文章

Effective Python 条目二:遵循PEP8风格规约

Python 增强建议#8,也被称为PEP8,是格式化Python代码的风格指引.只要符合语法,你可以随心所欲地写Python代码.然而,一致的风格使你的代码更加亲和与易于理解,及在一个大型社区中与其他Python程序员分享时促进协作.但是即使只有你自己一个人读你的代码,遵循这个风格规约将会使得以后修改起来更加容易. PEP8有一些列丰富的关于怎样去编写清晰干净的Python代码的细节.随着Python语言的演变,它将会持续更新.这是非常值得去阅读整个在线规约的(http://www.pytho

Effective Python之编写高质量Python代码的59个有效方法

                                                     这个周末断断续续的阅读完了<Effective Python之编写高质量Python代码的59个有效方法>,感觉还不错,具有很大的指导价值.下面将以最简单的方式记录这59条建议,并在大部分建议后面加上了说明和示例,文章篇幅大,请您提前备好瓜子和啤酒! 1. 用Pythonic方式思考 第一条:确认自己使用的Python版本 (1)有两个版本的python处于活跃状态,python2和pyt

Effective Python

Effective Python 1.确认自己所用的Python版本 优先使用python3,抛弃python2 查看python版本信息: python --versosn 2.遵循PEP8风格指南 采用一致的编码风格令代码更加易读,利于多人协作 绝对应该遵守的规则 空格 (1)使用space来表示缩进,而不要使用tab (2)和语法相关的每一层缩进都用4个空格来表示 (3)每行的字符不应超过79 (4)对于多行长表达式,除了首行之外的其余各行都应该在通常的缩进级别之上再加4个空格 (5)文件

浅析python函数

慢慢的开始进入状态啦,被明老师说我什么都不会后我觉得是该反思下自己这个学期的学习了,虽然我对实验没有很大的兴趣,但是既然名老师要求我开始做实验,我就跟着小丹师姐好好学学,用Tanger师兄的话来说就是:做实验有利于你理解生物信息学数据处理的原理,也许有一天,未来做生物信息的学弟学妹会看到这段话,就像我在码迷上看到free_mao的博文一样,生物信息还是基于生物的,生物原理必须要理解,不然和做计算机有什么区别呢?以前对书本的知识不够重视,语言的学习进度很缓慢,现在希望能分享一些学习心得体会给大家,

python函数

python函数学习 1. 概述: 函数是重用的程序段,用关键字def来定义,可以任意多次地运行这个语句块,被称为调用函数.Python提供了许多内建函数,比如print(),也可以自己创建函数,这被叫做用户自定义函数,函数能提高应用的模块性,和代码的重复利用率. 2.函数语法: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数. 函数的第一行语句可以选择性地使用文档字符串-用于存放函数说明. 函数内容以冒号起

Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数

一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.

python 函数

函数的定义 函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句. 创建函数 def 函数名 (参数列表) 函数体 例如: def sum1(a,b): c = a + b return c e=1 f=2 print (sum1(e,f)) 首先def 是定义函数名 sum1是函数名 括号中的a, b是函数的参数,是对函数的输入.参数可以有多个,也可以完全没有(但括号要保留). c = a +

Python 五、Python函数

一.函数概述 1.函数的基础概念 函数是python为了代码最大程度地重用和最小化代码冗余而提供的基础程序结构. 函数是一种设计工具,它能让程序员将复杂的系统分解为可管理的部件 函数用于将相关功能打包并参数化 在python中可以创建4种函数: 全局函数:定义在模块中 局部函数:嵌套于其它函数中 lambda(匿名)函数:仅是一个表达式 方法:与特定数据类型关联的函数,并且只能与数据类型关联一起使用 函数和过程的联系:每个Python函数都有一个返回值,默认为None,也可以使用"return

六、Python函数

Python函数 一.函数 函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字 可以通过函数名在程序的不同的地方多次执行(这通常叫做函数调用),却不需要在所有地方都重复编写这些语句 自定义函数和预定义函数 函数作用:降低编程的难度.代码重用 当我们自己定义一个函数时,通常使用def语句 def 函数名(参数列表): #可以没有参数 函数体 #!/usr/bin/python a = int(raw_input("please enter a number:&quo