美文网首页
python中,定义函数默认值,要注意的几点

python中,定义函数默认值,要注意的几点

作者: ugvibib | 来源:发表于2017-06-05 09:40 被阅读949次

一是,必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面);
二是,如何设置默认参数。
当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
使用默认参数有什么好处?最大的好处是能降低调用函数的难度。


def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)

enroll('Bob', 'M', 7)
enroll('Adam', 'M', city='Tianjin')

有多个默认参数时,调用的时候,既可以按顺序提供默认参数,比如调用enroll('Bob', 'M', 7),意思是,除了name,gender这两个参数外,最后1个参数应用在参数age上,city参数由于没有提供,仍然使用默认值。
也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。比如调用enroll('Adam', 'M', city='Tianjin'),意思是,city参数用传进去的值,其他默认参数继续使用默认值。


默认参数很有用,但使用不当,也会掉坑里。默认参数有个最大的坑

def add_end(L=[]):
    L.append('END')
    return L

>>> add_end([1, 2, 3])
[1, 2, 3, 'END']
>>> add_end(['x', 'y', 'z'])
['x', 'y', 'z', 'END']
#此时似乎是正常的,接着往下看:
>>> add_end()
['END']
>>> add_end()
['END', 'END']
>>> add_end()
['END', 'END', 'END']

很多初学者很疑惑,默认参数是[],但是函数似乎每次都“记住了”上次添加了'END'后的list。
原因解释如下:
Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
所以,定义默认参数要牢记一点:默认参数必须指向不变对象!
要修改上面的例子,我们可以用None这个不变对象来实现:

def add_end(L=None):
    if L is None:
        L = []
    L.append('END')
    return L
>>> add_end()
['END']
>>> add_end()
['END']

为什么要设计str、None这样的不变对象呢?因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。

相关文章

  • Python函数定义和使用

    定义 在Python中,函数如下定义: 几点需要注意的: 1.函数的命名规则要符合Python中命名要求,一般用小...

  • 函数基础(25)

    在Python中,采用下面的语法定义函数: 例如: 在定义函数的过程中,需要注意以下几点: -函数代码块以def关...

  • python中,定义函数默认值,要注意的几点

    一是,必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面);二...

  • ES6语法——Function的扩展

    一、函数默认参数ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。 ES6中函数默认值需要注意的点有:...

  • Python函数、对象几个知识点

    函数 一、参数 Python的函数参数可以定义默认值,当调用者没有提供参数时,函数在执行过程中用默认值设置该参数。...

  • function

    二、 函数 1. 默认值 ES5中,没有函数的默认值,所以只能var a = a || 'a' 推荐定义了默认值的...

  • Python函数,变量,闭包

    Python中函数可以设定默认值。Python是dynamically typed的,可以接收任何数据类型,函数的...

  • Python 的特殊属性

    Python 中通过函数定义所创建的用户自定义函数对象均具有一些特殊属性,需要注意的是这里介绍的是自定义函数(fu...

  • C++学习笔记——函数

    函数 内联函数: 定义: 编译时将函数中的代码直接代替调用语句 使用:修饰符inline 函数默认值 默认值参数靠右排列

  • 02|typescript常用实例

    一、定义索引数组 二、定义函数 函数参数可选 函数参数默认值 函数参数的剩余变量 函数的重载 三、ts中的类 类的...

网友评论

      本文标题:python中,定义函数默认值,要注意的几点

      本文链接:https://www.haomeiwen.com/subject/zjcifxtx.html