&emsp Python函数定义时参数灵活,使用不同参数的组合不仅可以简化调用者的代码,还可以处理复杂的参数。
引用>
函数的参数除了有必选参数外,还可以使用默认参数,可变参数,关键字参数和命名关键字参数。位置参数
定义一个计算x ^ 2的函数,以及一个计算x ^ n的函数
<代码类="语言python "> def calc1 (x): 返回x * def calc2 (x, n): s=1 因为我在范围(n): *=x 代码返回s >对于这两个函数,其参数都是位置参数,同时也是必选参数,调用函数时实参需和形参一一对应,当参数不对应时会引起错误,例如:
祝辞祝辞祝辞calc2 (2)
回溯(最近的电话最后):
文件“& lt; stdin>“, 1号线,在& lt; module>
TypeError: calc2()有2参数(1)祝辞祝辞祝辞calc2 (2 2 2)
引用>
回溯(最近的电话最后):
文件“& lt; stdin>“, 1号线,在& lt; module>
TypeError: calc2()有2参数(3)默认参数
对于函数calc2,如若函数调用过程中,计算x ^ 2使用的较多,每次调用都要通过calc2 (x, 2)来调用,这样就略显繁琐,此时可以通过默认参数来简化函数的调用,改写函数为:
<代码类="语言python "> def calc3 (x, n=2): s=1 因为我在范围(n): *=x 代码返回s >这样,我们在调用calc3(2)时,就相当于调用calc3(2, 2),而对于其他次方仍需明确指出n。
默认参数在使用中应当的注意:位置(必选)参数在前,默认参数在后。当有多个默认参数时,既可以按顺序提供默认参数,也可以不按顺序提供默认参数。
<代码类="语言python "> def saveInfo(姓名、性别、年龄=23日城市=昂贾荨?: 打印(姓名、性别、年龄、城市) saveInfo(“阿伦”、“M”、城市='北京')代码>定义默认参数时需要特别注意的一点:<强>默认参数必须指向不变对象! 强>
看如下例子:<代码类="语言python "> def加数(L=[]): L.append(结束) 返回L 代码>祝辞祝辞祝辞加数()
引用>
[‘结束’]
在祝辞祝辞加数()
[‘结束’,‘结束’]
在祝辞祝辞加数()
[‘结束’,‘结束’,‘结束’]出现这样的结果是因为:默认参数L仅仅代表[]的一个引用,函数定义时[]就已确定,每次调用加数时,使用的都是函数定义时的[],通过打印(id (L))可以看的出,每次调用该函数时使用的是同一内存地址的[]。
<代码类="语言python "> def加数(L=[]): L.append(结束) 打印(id (L)) 返回L 加数() # 4518465224 #(“结束”) 加数() # 4518465224 #(“结束”,“结束”)代码>为了避免这个问题,可以通过下面的方式,每次调用函数时,都会新建一个[]:
<代码类="语言python "> def加数(L=None): L=[]如果L==没有别人L L.append(结束) 打印(id (L)) 返回L 加数() # 4518687688 #(“结束”) 加数() # 4518688328 #(“结束”)代码>可变参数
可变参数即传入的参数个数是可变的,可以是0个、1个或多个
先定义一下函数,给定一组数字a, b, c…,计算这组数字的平方和a ^ 2 + ^ 2 + c ^ 2 +…<代码类="语言python "> def calc(数字): s=0 num的数字: s=s + num * num 代码返回s >该函数在调用时,需先组装一个列表或元组
,祝辞祝辞的在calc ([1, 2, 3])
14
在祝辞祝辞calc ([1, 2, 3]) 30
引用>如果利用可变参数,函数的调用可以简化
<代码类="语言python "> def calc数量(*): s=0 num的数字: s=s + num * num 返回年代 钙() # 0 钙(1、2、3) # 14 钙(1、2、3、4) 30 # 代码>可变参数与列表或元组参数相比,仅仅在参数前面加了个*号,<强> *的作用是将传入的参数组装成一个元组强>
,如果已经有一个列表或元组,要调用可变参数怎么办呢?祝辞祝辞祝辞num=[1, 2, 3]
在祝辞祝辞calc (num [0], num [1], num [2]) 14
引用>这种写法就过于繁琐,针对这种情况,python允许在列表或元组前加一个*号,将列表或元组的元素变成可变参数传入
Python函数参数详解