python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

首先,我们得定义一下位置参数、关键字参数

位置参数:函数调用时,通过参数的数量与位置一一对应的参数。

形如:  

def fun1(para1,  para2,...):

statements


fun1(1, 2,...)

我们可以将1,2,...称之为位置参数;

关键字参数:使用参数名提供的参数。

fun1(para2 = 2, para1 = 1)

这里的参数形式就是关键字参数。可能大家已经注意到了,关键字参数是可以无视顺序的,因为有参数名做标记。

当位置参数和关键字参数可以联合使用。但是位置参数放在前面,否则解释器无法区分。一般来说只有在强制要求的参数个数(无默认值参数)比可修改的具有默认值的参数个数少的时候,适合混合使用。


收集参数

def collect_params(*params):
      print(params)

参数前面加了‘*’,这个函数的参数是可变的,来多少用多少,‘*’主要是用来处理位置参数的。此类函数通过元组、字典来对参数进行区分使用。

我们看个例子:

print(collect_params(1, 2, 3))结果就是:(1, 2, 3)。
def collect_params(**params):
      print(params)

参数前面加了‘*’*,这个函数的参数是可变的,来多少用多少,‘**’主要是用来处理关键字参数的。此类函数通过元组、字典来对参数进行区分使用。


再来一个例子:
print(collect_params(x = 1, y = 2, z = 3))结果是:{‘z’ : 3, 'x' :1, 'y' : 2}。
我们来看一个复杂的情况
def collection_params(x, y, z='a', *params1, **params2):
      print(x, y, z)
      print(params1)
      print(params2)

print(collection_params(2, 4,'a', 'b', value = 'birthday', key = '19930305'))
结果:
2, 4,a
('a', 'b')
{'value' : 'birthday', 'key' : '19930305'}

收集参数逆过程,
def revers_collection_params(*params):
statements
params1= (1, 2, 3)  
revers_collection_params(*params1)  #将(1, 2, 3)分解成三个独立的参数,而不是(1, 2, 3)整体看做一个参数。
同理,对于关键字参数收集的逆过程,
def revers_collection_params(**params):
statements
params1={'value' : 'birthday', 'key' : '19930305'}
revers_collection_params(**params1)  #将{'value' : 'birthday', 'key' : '19930305'}分解成l两个个独立的关键字参数,而不是{'value' : 'birthday', 'key' : '19930305'}整体看做一个参数。