# -*- coding: utf-8 -*- #python 27 #xiaodeng #参数2 #默认情况下,参数都是通过其位置进行匹配,从左到右,而且必须精确地传递和函数头部参数名一样多的参数 #关键点: ''' 1、位置:从左到右进行匹配,按照顺序将参数传递给函数头部的参数名称 2、关键字参数:通过参数名进行匹配 调用者可以定义哪一个函数接受这个值,使用name=value的方式来传递参数 3、默认参数:为没有传入值的参数定义默认的参数值 使用name=value的方式,首先默认给参数传递一个值,如url=None,如果不给参数赋值就参数默认的值为None 4、可变参数:收集任意多基于位置或关键字的参数 如:*args,支持可变长度参数的tuple 5、*kwargs传递值的方式,传入的格式是一个dict ''' #语法匹配 ''' func(value) #常规参数:通过位置进行匹配 func(name=value) #关键字参数:通过变量名匹配 func(*args) #tuple,以name传递所有的对象,并作为独立的基于位置的参数 func(**dict) #以name成对的传递所有的关键字/值,并作为独立的关键字参数 ''' #细节: #在函数调用中,参数出现的先后顺序:任何位置参数(value),任何关键字参数(name=value),*args、**dict # #案例 #常规参数 def f(a,b,c): print a,b,c f(1,2,3) #关键字参数及其优点 #先后顺序已经不重要。 #起到数据标签的作用,可以一目了然的知道数据的含义是什么,如:name='xiaodeng',可以清楚的知道xiaodeng是名字 f(a=2,b=2,c=5) #任意参数的实例 #*args和**kwargs让函数支持接受任意数目的参数 #收集参数 #python将所有位置相关的参数收集到一个新的元组中 def f(*args): print args f(1)#注意结果是一个tuple结构 f(1,2) f(1,2,3) def my(**args): print args my() my(name='xiaodeng',age=28) my(name='xiaodeng', age=28, sex = 1)#name等name值是不需要引号的,请特别注意