python技巧分享(六)

07 Feb 2018 python技巧分享(六)

这是一个系列文章,主要分享python的使用建议和技巧,每次分享3点,希望你能有所收获。

1 正确的函数返回

  • 不推荐方式
def divide(a, b):
    if b != 0:
        return a * 1.0 / b


print divide(1, 0)
# None
print divide(0, 1)
# 0.0
  • 推荐方式
def divide(a, b):
    try:
        return a * 1.0 / b
    except ZeroDivisionError as e:
        raise e


print divide(0, 1)
# 0.0
print divide(1, 0)
# ZeroDivisionError: float division by zero

前一种方式中,如果输入的参数b为0,函数会默认返回None,这是一个不太好的编程习惯。例如,当把函数的返回值作为if条件判断时,0.0和None都是False,这样容易导致bug。后面这种方式,将除数是0当成异常抛出,让调用者处理异常,是比较合理的做法。

2 正确使用函数默认参数

  • 不推荐方式
def gen_list(a=[], b=None):
    a.append(b)
    return a


print gen_list(b=2)
# [2]
print gen_list(b=3)
# [2, 3]
  • 推荐方式
def gen_list(a=None, b=None):
    if a is None:
        a = []
    a.append(b)
    return a


print gen_list(b=2)
# [2]
print gen_list(b=3)
# [3]

前一种方式会导致函数默认值改变,多次调用相互影响。正确方式是将函数默认值设置成None,在函数内部初始化默认参数。这里只是针对传递引用类型的参数,如果是数字、字符串等类型就不存在该问题。

3 利用元组传递多个函数参数

def demo(a, b, c, d):
    print a, b, c, d


args = (1, 2, 3, 4)
demo(*args)
# 1 2 3 4

利用python的可变参数特性,可以通过元组传递多个参数,实现参数的“打包式”传递。

LEo at 20:33

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维技术迷

连仕彤博客[Python笔记] Python3增加的关键字nonlocal

2046
来自专栏风中追风

try,finally中都有return时程序的执行顺序

 在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家各有各的说法,刚好今天有个朋友问了...

37015
来自专栏http://www.cnblogs.com

python 反射

通过字符串映射或修改程序运行时的状态、属性、方法, 有以下4个方法: hasattr(obj,name_str) 判断一个对象obj里是否有对应的name...

3779
来自专栏老司机的技术博客

人人都能学会的python编程教程11:定义函数

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

5158
来自专栏老司机的技术博客

宝宝都能学会的python编程教程11:定义函数

定义函数 在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句...

2975
来自专栏流媒体

C++ string

852
来自专栏Hongten

java多线程系列_用Thread类创建线程(2)

在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thre...

1083
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(五) ——Redis中的整数集合

《Redis设计与实现》读书笔记(五) ——Redis中的整数集合 (原创内容,转载请注明来源,谢谢) 一、概述 整数集合(intset)是redis数据结构集...

3484
来自专栏C语言及其他语言

[蓝桥杯]字符逆序

题目描述 将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。 输入 输入包括一行。 第一行输入的字符串。 输出 输出转换好的逆序字符串。...

3525
来自专栏前端儿

大小写互换

  现在给出了一个只包含大小写字母的字符串,不含空格和换行,要求把其中的大写换成小写,小写换成大写,然后输出互换后的字符串。

1322

扫码关注云+社区

领取腾讯云代金券