python 函数参数

https://www.cnblogs.com/aszeno/p/10384887.html

https://www.cnblogs.com/aszeno/p/10386149.html

链接中的文章讲的比较详细,简单概括一下:

1. 位置参数

函数调用时必须指定。 可以直接函数调用时给相应的位置赋值,或者通过关键字指定。 必须有实参。

2. 默认参数

在函数定义时已经指定了default 值。函数调用时可以不给这个参数赋值。

函数定义时所有的默认参数都必须在位置参数之后。

3. 关键字参数

这是指函数调用时指定了形参名字和实参值。即函数调用是通过argx=xxx 的形式给出。

4. 可变长度参数(参数组)

在函数定义时

*args 表示tuple 类型参数组。 但不表示调用时的参数为tuple, 只是表示调用时的参数格式为 argx,argy

**kwargs 表示字典类型参数组。但不表示调用时的参数要为dict. 只是表示调用时参数格式为  argx=xx,argy=yy

 函数调用时,

如果实参是tuple ,要将tuple 中的item 变成函数的可变参数,那么需要在tuple 前面加上*

如果实参是dict, 要将dict 中的item 变成函数的关键字参数,那么需要在dict 前面加上**

也就是说可变参数在调用时有两种方式:

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

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

注意:

函数定义时,可变长度参数必须在位置参数和默认参数之后。且字典类型的参数组必须是最后一个。

5. 列表/元组/字典 可以作为函数的参数(因为他们都是对象,对象可以作为单个变量传递给函数的)

当他们作为函数参数的时候 只能表示 函数的一个参数,而不是一组参数。在函数中可以对列表和字典的值进行修改。而且这种修改会让输入变量的值永久改变。

 如果要禁止函数修改列表的值:

#禁止函数修改列表
print_models(unprinted_designs[:],completed_models)
原文地址:https://www.cnblogs.com/flymood/p/12290433.html