美文网首页
Python3 函数的默认值参数

Python3 函数的默认值参数

作者: 黄军雷 | 来源:发表于2023-10-21 16:03 被阅读0次

    在程序开发过程中,我们经常要为参数指定默认值。这样在调用函数时,可以使用比定义时更少的参数,例如:

    def ask_ok(prompt, retries=4, reminder='Please try again!'):
        while True:
            ok = input(prompt)
            if ok in ('y', 'ye', 'yes'):
                return True
            if ok in ('n', 'no', 'nop', 'nope'):
                return False
            retries = retries - 1
            if retries < 0:
                raise ValueError('invalid user response')
            print(reminder)
    

    该函数可以用以下三种方式调用:

    • 只给出必选实参:ask_ok('Do you really want to quit?')
    • 给出一个可选实参:ask_ok('OK to overwrite the file?', 2)
    • 给出所有实参:ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')

    在上面的例子中还使用了关键字 in ,用于确认序列中是否包含某个值。

    默认值在 定义 作用域里的函数定义中求值,所以:

    i = 5
    
    def f(arg=i):
        print(arg)
    
    i = 6
    f()
    

    上例输出的是 5

    重要警告: 默认值只计算一次。默认值为列表、字典或类实例等可变对象时,会产生与该规则不同的结果。例如,下面的函数会累积后续调用时传递的参数:

    def f(a, L=[]):
        L.append(a)
        return L
    
    print(f(1))
    print(f(2))
    print(f(3))
    

    输出结果如下:

    [1]
    [1, 2]
    [1, 2, 3]
    

    需要提醒的是:

    • 即使中间有次函数调用过程中,显式的给 L 传递了值,在此之后的调用如果还是用默认值的方式,依然会持续累积。
    • 不想在后续调用之间共享默认值时,应以如下方式编写函数:
    def f(a, L=None):
        if L is None:
            L = []
        L.append(a)
        return L
    

    相关文章

      网友评论

          本文标题:Python3 函数的默认值参数

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