Python函数参数详解

  
  

  &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函数参数详解