跳转至

函数的输入参数

上一节已经讲了一部分函数的输入参数,函数可接受无参数,和多个参数的情况。仔细想这个问题,如果函数的输入参数较多,4-5个参数。在调用这个函数的时候,传入参数的顺序很容易出错。比如:

def confirm(name, age, gender, email, password):
print("请确认您的个人信息:")
print("name:", name)
print("age:", age)
print("gender:", gender)
print("email:", email)
print("password:", password)

在这种情况下,你必须很小心的按照顺序输入。有没有办法让参数智能一点,即使不按顺序也能自动对应呢?这就是我们要将的关键词参数。

## 关键词参数 关键词可以很容易映射传入参数的顺序,只需要指定输入参数的名称。比如我们调用confirm函数。

hello(age=15, 
    gender='M', 
    password="123456", 
    email="Black@qq.com",
    name="Black")

请确认您的个人信息:
name: Black
age: 15
gender: M
email: Black@qq.com
password: 123456
我们并没有按照参数的输入顺序,仍然得到了正确的输出顺序。我们在输入的时候指定了参数的名称。

默认参数

当输入参数较多,有些参数可以不指定输入值,使用默认的值,这就是默认参数。默认的参数的使用非常多,尤其对于复杂程序的调用,用户并需要了解所有的参数含义,就能使用你编写的函数。

比如我们来看一个系统函数,打开一个文件的函数open。部分源码如下:

open(
    file,
    mode='r',
    buffering=-1,
    encoding=None,
    errors=None,
    newline=None,
    closefd=True,
    opener=None,
)
Docstring:
Open file and return a stream.  Raise OSError upon failure.

第一个参数file文件名称,打开一个文件,文件名称你必须输入,之后的参数全是默认参数。第二个参数mode打开文件的模式,默认参数值为r表示read只读的模式打开文件.encoding=None默认打开的编码方式为None。我们在调用这个函数是,没有指定参数值的是必传参数,指定了参数的值如果不传值,就意味着使用默认参数。

比如我们完成从1加到的N的程序。

def sum2n(n=100):
    total = 0
    i = 1
    while i <= n:
        total += i
        i = i + 1
    return total
print(sum2n()) # 不指定参数,默认n=100
print(sum2n(10))

# 5050
# 55

注意

函数在定义或者调用的时候,默认参数一定要放在普通参数之后,否则会报错。

小黄车的使用年龄必须是12岁以上,那么我们注册的时候默认年龄是12岁。

def login(name, age=12, area='local'):
    pass

如果把必传参数name放在关键词参数之后,就会报错。

def login(age=12, 
    name,
    area='local'): # IDE 提示报错
    pass

这是由于我们在调用login函数时,传入的参数可以是这样login("王强", 17)第一个参数就传入的是name的值,第二个就是age的值。如果允许了必传参数放在关键词参数之后,那么传参数时就会有歧义。

总结

本节内容进一步讲述了函数的传参问题,对于输入参数较多的情况可以使用关键词传参,指定参数名称的方式传值。在某些情况下也可以使用默认参数,不传值意味着使用函数的默认值。

评论