函数参数
位置参数(必须参数)
默认参数
关键字参数
任意参数列表
解包参数列表
位置参数(必须参数)
必须传入的参数在给函数传参数时,按照顺序,依次传值。
先写一个下面的函数: def power(m, n): result=1 while n>0: n=n-1 result=result*m return result # 调用函数并输出结果 print(power(4,3)) 解释说明: 函数power(m,n)中有两个参数,m和n,这两个参数都是位置参数,调用的时候,传入的两个值按照顺序,依次赋值给m和n。
默认参数
最有用的形式是对一个或多个参数指定一个默认值。这样创建的函数,可以用比定义时允许的更少的参数调用
这个函数可以通过几种方式调用:
- 只给出必需的参数:
ask_ok('Do you really want to quit?')
- 给出一个可选的参数:
ask_ok('OK to overwrite the file?', 2)
- 或者给出所有的参数:
ask_ok('OK to overwrite the file?', 2,'Come on, only yes or no!')
这个示例还介绍了 in
关键字。它可以测试一个序列是否包含某个值。
关键字参数
也可以使用形如 kwarg=value
的 关键字参数 来调用函数。
接受一个必需的参数(voltage
)和三个可选的参数(state
, action
,和 type
)。
但下面的函数调用都是无效的:
在函数调用中,关键字参数必须跟随在位置参数的后面。传递的所有关键字参数必须与函数接受的其中一个参数匹配(比如 actor
不是函数 parrot
的有效参数),它们的顺序并不重要。这也包括非可选参数,(比如 parrot(voltage=1000)
也是有效的)。不能对同一个参数多次赋值。下面是一个因为此限制而失败的例子:
当在最后出现形如 **name
的形式参数时,它会接受一个字典(参见 映射类型 --- dict )字典中包含了所有除了与形式参数对应的其他关键字参数。这可以和形如 *name
的形式参数(在下一小节描述)结合,该参数会接受一个包含形式参数列表之外的位置参数的元组。(*name
必须在出现在 **name
之前。)比如,如果我们定义一个这样的函数:
它可以像这样调用:
注意打印时关键字参数的顺序保证与调用函数时提供它们的顺序是相匹配的。
任意的参数列表
最后,最不常用的选项是可以使用任意数量的参数调用函数。这些参数会被包含在一个元组里(参见 元组和序列 )。在可变数量的参数之前,可能会出现零个或多个普通参数。
一般来说,这些 可变参数
将在形式参数列表的末尾,因为它们收集传递给函数的所有剩余输入参数。出现在 *args
参数之后的任何形式参数都是 ‘仅关键字参数’,也就是说它们只能作为关键字参数而不能是位置参数。
解包参数列表
*运算符可以把一个可迭代对象(列表或者元组)拆开作为函数的参数
同样**可以拆开字典作为来提供关键字参数