函数的输入参数¶
上一节已经讲了一部分函数的输入参数,函数可接受无参数,和多个参数的情况。仔细想这个问题,如果函数的输入参数较多,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的值。如果允许了必传参数放在关键词参数之后,那么传参数时就会有歧义。
总结¶
本节内容进一步讲述了函数的传参问题,对于输入参数较多的情况可以使用关键词传参,指定参数名称的方式传值。在某些情况下也可以使用默认参数,不传值意味着使用函数的默认值。