美文网首页
Python3 - 定义有默认参数的函数

Python3 - 定义有默认参数的函数

作者: 惑也 | 来源:发表于2018-12-23 23:06 被阅读46次

问题

定义一个函数或者方法,它的一个或多个参数是可选的并且有一个默认值。

解决方案

在函数定义中,直接给参数指定一个默认值,并放到参数列表最后就行了。例如:

def spam(a, b=42):
    return a, b

print(spam(1))
(1, 42)

print(spam(1, 2))
(1, 2)

如果默认参数是一个可修改的容器,比如一个列表、集合或者字典,可以使用None作为默认值,就像下面这样:

# Using a list as a default value
def spam(a, b=None):
    if b is None:
        b = []
    ...

讨论

默认参数的值,仅仅在函数定义的时候赋值一次。试着运行下面这个例子:

x = 100

def func(a, b=x):
    print(a, b)

print(func(1))
1 100

x = 1
print(func(1))
1 100

当改变x值时,对默认参数值并没有影响,这是因为在函数定义的时候就已经确定了它的默认值。

默认参数的值,通常应该是不可变的对象,比如None、True、False、数字或字符串。 特别的,尽量不要像下面这样写代码:

def spam(a, b=[]): # NO!
    ...

如果这么设置默认参数的值,当默认值在其他地方被修改后,会影响到下次调用这个函数时的默认值。比如:

def fun(a, b=[]):
    print(b)
    return b 

r = fun(1)
print(r)
[]
[]

r.append(99)
print(fun(1))
[99]
[99]

当需要测试函数的某个可选参数,是否被使用者传递进来时。尽量不要用某些默认值,比如None、 0或False,来测试使用者是否提供参数默认值,因为这些值都是合法的值,是可能被用户传递进来的。

为了解决这个问题,可以创建一个独一无二的私有对象实例,在函数里面,通过检查传递的参数值与这个自定义的实例是否一样来判断。示例:

_no_value = object()

def func_no_value(a, b=_no_value):
    if b is _no_value:
        return 'No b value supplied'
    else:
        return a, b

print(func_no_value(1))
No b value supplied

print(func_no_value(1, None))
(1, None)

这里使用 object() 看上去不太常见。object 是python中所有类的基类。 创建 object 类的实例,并没有什么实际用处,因为它并没有任何有用的方法,也没有任何实例数据,唯一能做的就是测试同一性,这个刚好符合“同一性测试”的需求。

相关文章

  • Scala入门与进阶(三)- 函数

    1.函数的定义和使用 函数/方法的定义: 2.默认参数 默认参数:在函数定义时,允许指定参数的默认值$SPARK_...

  • Python3 - 定义有默认参数的函数

    问题 定义一个函数或者方法,它的一个或多个参数是可选的并且有一个默认值。 解决方案 在函数定义中,直接给参数指定一...

  • Python函数的参数(详细版)

    函数的参数有:必选参数、默认参数、可变参数、关键字参数。 在Python中定义函数,可以用必选参数、默认参数、可变...

  • ES6 函数默认参数、rest运算符(扩展运算符)剩余参数

    一.函数默认参数 1.旧函数默认参数写法 2.新函数默认参数写法 二.函数参数默认已经定义了,不能再使用let,c...

  • 7、函数

    7.1 默认参数 定义函数的时候,还可以有默认参数。例如Python自带的int()函数,其实就有两个参数,我们既...

  • Python 函数

    调用函数 定义函数 函数的参数必选参数、默认参数、可变参数、关键字参数、命名关键字参数 位置参数 默认参数 可变参...

  • 1.0 C++远征:函数参数默认值、函数重载、内联函数

    C++远征 [TOC] 一、函数参数默认值 1.函数参数默认值的声明 2.函数参数默认值的定义 3.函数参数默认值...

  • 函数相关

    函数定义 def 定义函数,函数返回值用return; python参数定义顺序必须是:必选参数、默认参数、可变参...

  • kotlin 基础 7 默认参数和具名参数

    在函数定义时候可以给函数参数一个默认值 PI:Float = pi 对于参数有默认值的函数,只想传入一个参数,需要...

  • 4、函数

    函数 1、函数的默认参数 2、函数的参数默认已经定义了,不能再使用let const声明 3、箭头函数 =>

网友评论

      本文标题:Python3 - 定义有默认参数的函数

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