Python函数的参数

  

函数的参数

  <人力资源/>   

定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。

  

Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数,可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

  

位置参数

  <人力资源/>   

#先写一个计算x的平方的函数:

  
 <代码> def权力(x):
  返回x *
  n=int(输入(“请输入想要开平方的数值:'))
  打印(权力(n))  
  

#对于权力(x)函数,参数x就是一个位置函数。
#挡我们调用权力()函数时,必须传入有且仅有一个的参数x

  ,
 <代码>祝辞的在比;(5)
  25
  在在在(15)
  225年 
  

#现在,如果要计算X的3次方怎么办?可以再定义一个力量3函数,但是如果要计算X的n次方怎么办,我们不可能定义无限多个函数

  

#你也许想到了,可以把权力(x)修改(x, n)为力量,用来计算x的n次方

  
 <代码> def权力(x, n):
  s=1
  虽然n> 0:
  n -=1
  s=s * x
  代码返回s  
  

#对于这个修改后的权力(x, n)函数,可以计算任意n次方:

  ,
 <代码>祝辞的在比;权力(5,2)
  25
  在在在权力(5,3)
  125年 
  

#修改后的权力(x, n)函数有两个参数:x和n,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数x和n。

  

默认参数

  <人力资源/>   

#新的权力(x, n)函数定义没有问题,但是,旧的调用代码失败了,原因是我们增加了一个参数,导致旧的代码因为缺少一个参数而无法正常调用:

  ,
 <代码>祝辞的在比;(5)
  回溯(最近的电话):
  文件“& lt; stdin>”,1号线& lt; module>
  TypeError:权力()失踪1所需的位置参数:“n” 
  

# Python的错误信息很明确:调用函数的力量()缺少了一个位置参数n。

  

#这个时候,默认参数就排上用场了。由于我们经常计算x2,所以,完全可以把第二个参数n的默认值设定为2:

  
 <代码> def权力(x, n=2):
  s=1
  n比;0:
  n=n - 1
  s=s * x
  代码返回s  
  

#这样,当我们调用电源(5)时,相当于调用权力(5,2):

  ,
 <代码>祝辞的在比;(5)
  25
  在在在权力(5,2)
  25  
  

#而对于n比;2的其他情况,就必须明确地传入n,比如权力(5,3)。

  

#从上面的例子可以看的出,默认参数可以简化函数的调用。设置默认参数时,有几点要注意:

  

#一是必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面),

  

#二是如何设置默认参数。

  

#当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

  

#使用默认参数有什么好处?最大的好处是能降低调用函数的难度。

  

#举个例子,我们写个一年级小学生注册的函数,需要传入姓名和性别两个参数:

  
 <代码> def登记(姓名,性别):
  打印(“名字:”,名称)
  打印(性别:,性别) 
  

#这样,调用登记()函数只需要传入两个参数:

  ,
 <代码>祝辞的在比;登记(“莎拉”、“F”)
  名称:莎拉
  性别:F  
  

#如果要继续传入年龄,城市等信息怎么办?这样会使得调用函数的复杂度大大增加。

  

#我们可以把年龄和城市设为默认参数:

  
 <代码> def登记(姓名、性别、年龄=6,城市='北京'):
  打印(“名字:”,名称)
  打印(性别:,性别)
  打印(年龄:,年龄)
  打印(“城市”,城市) 
  

#这样,大多数学生注册时不需要提供年龄和城市,只提供必须的两个参数:

  ,
 <代码>祝辞的在比;登记(“莎拉”、“F”)
  名称:莎拉
  性别:女
  年龄:6
  城市:北京 
  

#只有与默认参数不符的学生才需要提供额外的信息:

  
 <代码>登记(“鲍勃”,“M”, 7)
  登记(“亚当”,“M”,城市=疤旖颉? 
  

Python函数的参数