参数
1.基本参数知识
- 任意个数
- 任意类型
def func(a1,a2,a3):
print(a1,a2,a3)
func(1,"asdf",True) #1 asdf True
2.位置传参数(调用函数并传入参数)
def user(name,age):
print('用户姓名: %s'% name)
print('用户年龄: %s '% age)
user('gebangfeng',16)
>用户姓名: gebangfeng
>用户年龄: 16
位置实参的顺序很重要,使用位置实参来调用函数时,如果实参的顺序不正确,结果可能出乎意料
user(16,'gebangfeng')
>用户姓名: 16
>用户年龄: gebangfeng
3.关键字传参数
user(age=16,name='gebangfeng')
>用户姓名: gebangfeng
>用户年龄: 16
关键字实参让你无需考虑函 数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途.
使用关键字实参时,务必准确地指定函数定义中的形参名
4.默认值
编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用 指定的实参值;否则,将使用形参的默认值.。因此,给形参指定默认值后,可在函数调用中省略 相应的实参。使用默认值可简化函数调用,还可清楚地指出函数的典型用法。
def user(name,age='16'):
print('用户姓名: %s'% name)
print('用户年龄: %s '% age)
user('gebangfeng')
>用户姓名: gebangfeng
>用户年龄: 16
由于给age指定了默认值, 无需通过实参来指定动物类型,因此在函数调用中只包含一个实参——用户的名字
如果用户的年龄不是16,可以使用下面的函数调用
user(name='gebangfeng',age=22)
>用户姓名: gebangfeng
>用户年龄: 22
由于给age提供了实参,因此Python将忽略这个形参的默认值。
注意 使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的实参。 这让Python依然能够正确地解读位置实参。
6.等效的函数调用
鉴于可混合使用位置实参、关键字实参和默认值,通常有多种等效的函数调用方式。请看下 面的函数describe_pets()的定义,其中给一个形参提供了默认值:
def user(name,age=16):
基于这种定义,在任何情况下都必须给pet_name提供实参;指定该实参时可以使用位置方式, 也可以使用关键字方式。如果要描述的动物不是小狗,还必须在函数调用中给animal_type提供 实参;同样,指定该实参时可以使用位置方式,也可以使用关键字方式.
下面对这个函数的所有调用都可行:
#16岁的葛邦风
user('葛邦风')
user(name='葛邦风')
#20岁的刘倩
user('刘倩',20)
user(name='刘倩',age=20)
user(age=20,name='刘倩')
注意 使用哪种调用方式无关紧要,只要函数调用能生成你希望的输出就行。使用对你来说最 容易理解的调用方式即可
7.避免实参错误
如果提供的参数多余或少于函数完成其工作所需的信息时,将会出现参数不匹配错误。例如,调用函数user时没有指定任何实参。
def user(name,age='16'):
print('用户姓名: %s'% name)
print('用户年龄: %s '% age)
user()
Python发现该函数调用缺少必要的信息,而traceback指出了这一点:
Traceback (most recent call last):
File "E:/wordpython/python lianxi/lei.py", line 169, in <module>
user()
TypeError: user() missing 1 required positional argument: 'name'
上面的意思是user()参数中缺少必须的位置参数name.