参数定义:
1. 位置参数:
这是熟悉的标准化参数,位置参数必须在调用函数中定义的准确顺序来传递,在没有默认参数的情况下,传入参数
的精确数目必须和声明的数目一致。
def foo(who, name):
print(‘{0} is {1}‘.format(who, name)
foo函数有两个位置参数,那么意味这foo的调用必须有两个参数,不能多也不能少
2. 默认参数:
定义默认参数的如下:
def func(posargs, defargs=dval, defargs2=dval2,...):
‘function_document_string‘
unction_body_suite
没个默认参数都紧跟着一个默认的赋值语句,如果在函数的调用中没有给默认参数传递值,函数会采用这个赋值来实现参数调用。
3. 可变长度参数:
和常规函数明显不同,如果在函数的调用过程中需要处理可变数量的参数,由于参数的数目在函数的调用之前是未知的(甚至在运行期间,每次函数的调用参数的数目也是不同的)这个使用需要使用可变长度参数来定义函数。
非关键字可变长度参数(元组)
def func([formal_args],*args_tuple):
‘function_document_string‘
function_body_suite
星号操作符之后的形参将作为元组传递给函数。元组保存了所有传递过来的额外的参数。
def tupleVarargs(arg1,arg2=‘defaultB‘,*theRest):
print(‘formal arg 1:‘, arg1)
print(‘formal arg 2:‘, arg2)
for eachxtArg in theRest:
print(‘another args:‘,eachxtarg)
关键字变量参数(字典)
为了区分关键字参数和非关键字参数使用××
def func([formal_args], [*vargst], [**vargsd]):
‘function_document_string‘
function_body_suite
这样传进来的参数都是成对的,字典中的键为参数名值相应的为参数值。
1 def newfoo(formalarg1, formalarg2=‘default‘, *nnameargs, **nameargs): 2 print(‘formal 1 :‘,formalarg1) 3 print(‘formal 2 :‘, formalarg2) 4 for nname in nnameargs: 5 print(‘no key name args :‘, nname) 6 for kname in nameargs.keys(): 7 print(‘key name args {0}: {1}‘.format(kname, nameargs[kname])) 8 9 # 普通的方式调用函数 10 newfoo(10, 20, 30, 40, fifty=50, sixty=60) 11 12 # 将非关键字参数和关键字参数通过× 和 ××的方式传递 13 newfoo(10, 20, *(30, 40), **{‘fifty‘:50, ‘sixty‘:60}) 14 15 # 在函数之外来构造元组和字典进行参数传递 16 aTuple = (30, 40) 17 aDict = {‘fifty‘:50, ‘sixty‘:60} 18 newfoo(10, 20, *aTuple, **aDict)
传递参数:
其实在传递参数的时候可以根据定义函数参数的形式进行反向推导来传递
1 def add(a, b): 2 return a+b 3 4 5 print(add(1, 2)) 6 print(add(b=2, a=1)) 7 print(add(*(1, 2))) 8 print(add(**{‘a‘:1, ‘b‘:2}))