"""显示宠物的信息"""
print("\nI have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet(animal_type='hamster', pet_name='harry')
函数describe_pet() 还是原来那样, 但调用这个函数时, 我们向Python
明确地指出了各个实参对应的形参。 看到这个函数调用时, Python知道应该
将实参'hamster'和'harry' 分别存储在形参animal_type 和pet_name 中。 输
出正确无误, 它指出我们有一只名为Harry的仓鼠。
关键字实参的顺序无关紧要, 因为Python知道各个值该存储到哪个形参中。
下面两个函数调用是等效的:
describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(pet_name='harry', animal_type='hamster')
注意 使用关键字实参时, 务必准确地指定函数定义中的形参名。
2.3 默认值
编写函数时, 可给每个形参指定默认值 。 在调用函数中给形参提供了实
参时, Python将使用指定的实参值; 否则, 将使用形参的默认值。 因此,
给形参指定默认值后, 可在函数调用中省略相应的实参。 使用默认值可简化函
数调用, 还可清楚地指出函数的典型用法。
例如, 如果你发现调用describe_pet() 时, 描述的大都是小狗, 就可将
形参animal_type 的默认值设置为'dog' 。 这样, 调用describe_pet() 来描述
小狗时, 就可不提供这种信息:
def describe_pet(pet_name, animal_type='dog'):
"""显示宠物的信息"""
print("\nI have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet(pet_name='willie')
这里修改了函数describe_pet() 的定义, 在其中给形参animal_type 指定
了默认值'dog' 。 这样, 调用这个函数时, 如果没有给animal_type 指定值,
Python将把这个形参设置为'dog' :
I have a dog.
My dog's name is Willie.
请注意, 在这个函数的定义中, 修改了形参的排列顺序。 由于给
animal_type 指定了默认值, 无需通过实参来指定动物类型, 因此在函数调用
中只包含一个实参——宠物的名字。 然而, Python依然将这个实参视为位置
实参, 因此如果函数调用中只包含宠物的名字, 这个实参将关联到函数定义中
的第一个形参。 这就是需要将pet_name 放在形参列表
开头的原因所在。
现在, 使用这个函数的最简单的方式是, 在函数调用中只提供小狗的名
字:
describe_pet('willie')
这个函数调用的输出与前一个示例相同。 只提供了一个实参——'willie'
, 这个实参将关联到函数定义中的第一个形参——pet_name 。 由于没有给
animal_type 提供实
参, 因此Python使用其默认值'dog' 。
如果要描述的动物不是小狗, 可使用类似于下面的函数调用:
describe_pet(pet_name='harry', animal_type='hamster')