1.使用默认参数

python文件 后面跟参数如何执行 python **参数为什么放在最后面_ci

python文件 后面跟参数如何执行 python **参数为什么放在最后面_python_02

使用默认参数优点:降低调用函数的难度,特别时函数比较复杂时,或者有选填内容时就直接忽略掉。

注意:

(1)必选参数在前,默认参数在后(否则解释器报错,因为机器不知道你到底是在改变默认参数,还是在填写必选参数)

(2)当函数有多个参数时,变化大的放前面,变化小的放后面,这样变化小的可以设置默认参数。

(3)默认参数必须指向不变对象,这样的话防止多运行过程中出错。如下图所示

python文件 后面跟参数如何执行 python **参数为什么放在最后面_可变参数_03

 原因就是L可变对象,每次运行都改变了L的内容

修改方法就是做个对L进行判断(这里有点难理解,其实就是避免空函数,就是避免一直调用add_end()这样一个没有意义的函数,正常都是有赋值的,比如add_end([1,2,3]),加条件提高函数的健壮性)

python文件 后面跟参数如何执行 python **参数为什么放在最后面_python_04

 2.可变参数

可变参数就是通过使用列表list或者元组tuple来传进去,把list或者tuple当成一个整体,老样子,一图胜千言

python文件 后面跟参数如何执行 python **参数为什么放在最后面_默认参数_05

python文件 后面跟参数如何执行 python **参数为什么放在最后面_python文件 后面跟参数如何执行_06

 另一种表示方式是*num,表示把nums这个list的所有元素作为可变参数传进去,如下

python文件 后面跟参数如何执行 python **参数为什么放在最后面_python_07

 3.关键字参数

关键字参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动的组成一个tuple,如下图所示

python文件 后面跟参数如何执行 python **参数为什么放在最后面_python文件 后面跟参数如何执行_08

也可以简化:

person('michael',21,gender='M',job='Engineer')和下面等价

extra = {'city': 'Beijing', 'job': 'Engineer'}

person('michael', 21, **extra) 

4.命名关键字参数

对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数,如果需要规范那就要在函数内部通过kw检查,如下所示,检查是否有city和job参数

python文件 后面跟参数如何执行 python **参数为什么放在最后面_ci_09

但是调用者仍然可以传入不受限制的关键字,如果限制接受的关键字的话,如下所示

python文件 后面跟参数如何执行 python **参数为什么放在最后面_ci_10

python文件 后面跟参数如何执行 python **参数为什么放在最后面_python文件 后面跟参数如何执行_11

 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字就不再需要特殊分隔符*了

python文件 后面跟参数如何执行 python **参数为什么放在最后面_python_12

 

python文件 后面跟参数如何执行 python **参数为什么放在最后面_默认参数_13

 可以是使用默认参数,如下所示

python文件 后面跟参数如何执行 python **参数为什么放在最后面_默认参数_14

 在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。如下所示:

python文件 后面跟参数如何执行 python **参数为什么放在最后面_ci_15

python文件 后面跟参数如何执行 python **参数为什么放在最后面_python_16

总结:

(1)*args是可变参数,args接收的是一个tuple

可变参数可以直接传入:func(1,2,3),也可以组装成list或tuple,通过*args传入:func(*(1,2,3));

(2)**kw是关键字参数,kw接收的是一个dict

关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})

(3)命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。

(4)定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。