欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python函数参数默认值及重要警告

程序员文章站 2022-03-20 19:20:52
最有用的形式是对一个或多个参数指定一个默认值。这样创建的函数,可以用比定义时允许的更少的参数调用,比如: def ask_ok(prompt, retries=4, reminder='Please try again!'): while True: ok = input(prompt) if ok ......

最有用的形式是对一个或多个参数指定一个默认值。这样创建的函数,可以用比定义时允许的更少的参数调用,比如:

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]

 

如果你不想要在后续调用之间共享默认值,你可以这样写这个函数:

def f(a, l=none):
    if l is none:
        l = []
    l.append(a)
    return l