2017-9-2 8.5 传递任意数量的实参

为了简洁起见,可以把重复内容都封装为函数。

这样,只要一行就可以实现原来很多行代码的功能。这些函数还可以根据传递的不同命令内容来决定具体函数的功能。这些命令内容叫参数

有时候,你预先不知道函数需要接受多少个实参,好在Python允许函数从调用语句中收集任意数量的实参。


2017-9-2 8.5 传递任意数量的实参_第1张图片

形参名*toppings 中的星号让Python创建一个名为toppings 的空元组,并将收到的所有值都封装到这个元组中。注意,Python将实参封装到一个元组中,即便函数只收到一个值也如此
注意,Python将实参封装到一个元组中,即便函数只收到一个值也如此。

不管函数收到的实参是多少个,这种语法都管用。

8.5.1结合使用位置实参和任意数量实参

如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。

(任意数量的参数和固定格式的参数参数怎么组合呢?那首先解决少的,然后后面放任意数量参数。)

例如,如果前面的函数还需要一个表示比萨尺寸的实参,必须将该形参放在形参*toppings的前面:


2017-9-2 8.5 传递任意数量的实参_第2张图片
范例

Python将收到的第一个值存储在形参size 中,并将其他的所有值都存储在元组toppings 中。

8.5.2使用任意数量的关键字实参

有时候,需要接受任意数量的实参,但预先不知道传递给函数的会是什么样的信息。在这种情况下,可将函数编写成能够接受任意数量的键—值对——调用语句提供了多少就接受多少。

一个这样的示例是创建用户简介:你知道你将收到有关用户的信息,但不确定会是什么样的信息。在下面的示例中,函数build_profile()接受名和姓,同时还接受任意数量的关键字实参:


2017-9-2 8.5 传递任意数量的实参_第3张图片
范例

形参**user_info 中的两个星号让Python创建一个名为user_info 的空字典,并将收到的所有名称—值对都封装到这个字典中。在这个函数中,可以像访问其他字典那样访问user_info 中的名称—值对。

build_profile() 的函数体内,我们创建了一个名为profile 的空字典,用于存储用户简介。

我们遍历字典user_info 中的键—值对,并将每个键—值对都加入到字典profile 中。们将字典profile 返回给函数调用行。

你可能感兴趣的:(2017-9-2 8.5 传递任意数量的实参)