3.当调用者希望使用默认参数中的某几个默认参数时,调用时不按顺序提供部分默
认参数,需要把参数名写上。
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ python3 somevalue.py
Hurryin LemonTree ,he is 18 years old and graduated fromGreedApple
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ cat somevalue.pydef myPrint(name, school = 'GreedApple', age = 18, hometown = 'Pecato'):print(name, 'in', hometown, ',he is', age, 'years old and graduated from', school)returnmyPrint('Hurry', hometown = 'LemonTree')
4.定义默认参数时,默认参数必须指向不变对象,否则在多次调用函数时可能产生
错误的结果。因为,Python函数在定义的时候,默认参数的值就被计算出来了,在
每次调用该函数时,如果改变了默认参数的内容,则下次调用时,默认参数的内容
就变了,不再是函数定义时的值了。
可变参数:调用函数时,可变参数的传入值数量是可变的,类似于传入一个list或
tuple。只是,定义可变参数和定义一个list或tuple参数相比,仅仅在参数名前面
加了一个*号。并且Python允许你在list或tuple前面加一个*号,把list或tuple的
元素变成可变参数用来作为调用函数时的传入值。
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ python3 sum.py10
10
10
10[wangml@iZwz976helaylvgqok97prZ pythoncode]$ cat sum.pydefsum_one(value):
sum=0for i invalue:
sum+=ireturnsumdef sum_two(*value):
sum=0for i invalue:
sum+=ireturnsum
value= [1, 2, 3, 4]print(sum_one([1, 2, 3, 4]))print(sum_one(value))print(sum_two(1, 2, 3, 4))print(sum_two(*value))
关键字参数:与可变参数相比,关键字参数允许你传入0个或任意个含参数名的参
数,这些关键字参数在函数内部自动组装为一个dict。 只是,定义关键字参数和
定义一个dict参数相比,仅仅在参数名前面加了两个*号。在调用函数时,Python
允许dict前加两个*号,将其转换为关键字参数传进去
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ python3 myPrint2.py
Name: Hurry age:18 {'Number': 12345, 'SchoolID': 54321}
Name: Hurry age:18 {'Number': 12345, 'SchoolID': 54321}
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ cat myPrint2.pydef myPrint(name, age, **other):print('Name:', name, 'age:', age, other)returntemp= {'Number': 12345, 'SchoolID': 54321}
myPrint('Hurry', 18, **temp)
myPrint('Hurry', 18, Number = 12345, SchoolID = 54321)
命名关键字参数:可以限制传入值KEY的关键字参数,定义时和关键字参数**kw不
同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ python3 myPrint3.py
Name: Hurry age:18 Number 12345 SchoolID 54321Traceback (most recent call last):
File"myPrint3.py", line 8, in myPrint('Hurry', 18, Number = 12345, CardID = 54321)
TypeError: myPrint() got an unexpected keyword argument'CardID'[wangml@iZwz976helaylvgqok97prZ pythoncode]$ cat myPrint3.pydef myPrint(name, age, *, Number, SchoolID):print('Name:', name, 'age:', age, 'Number', Number, 'SchoolID', SchoolID)returntemp= {'Number': 12345, 'SchoolID': 54321}
myPrint('Hurry', 18, **temp)
myPrint('Hurry', 18, Number = 12345, CardID = 54321)
注意:如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再
需要一个特殊分隔符*了
例如:def myPrint(name, age, args*, Number, SchoolID):
Tips:
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名
关键字参数,这5种参数都可以组合使用。但是请注意:函数定义时参数定义的顺
序必须按照:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
如果我们想定义一个什么都不做的空函数,我们可以使用 pass语言 作为函数体。
实际上pass可以用来作为占位符,假如现在还没想好怎么写函数的代码,则可以先
放一个pass,让代码能运行起来。