当前位置: 首页 > 科技观察

Python函数的参数类型和使用技巧

时间:2023-03-13 23:18:52 科技观察

我们先定义一个计算体重指数(BMI)的函数。BMI是体重与身高的平方比,其中体重单位为千克,身高单位为米。>>>defbmi(height,weight,name):i=weight/height**2print('%s'体重指数为%0.1f'%(name,i))>>>bmi(1.75,75,'Xufive')Xufive的体重指数为24.5。自定义函数bmi有3个参数,每个参数都有明确的含义。调用该函数时,这三个参数必须按照定义的顺序传入,缺一不可。这也是Python函数最基本的参数传递规则。接下来,稍微修改bmi函数,并为name参数指定一个默认值。>>>defbmi(height,weight,name='you'):i=weight/height**2print('%s'体重指数为%0.1f'%(name,i))>>>bmi(1.75,75)#可以不传name参数,使用默认值,你的体重指数是24.5>>>bmi(1.75,75,'Xufive')#你也可以传name参数,Xufive的体重指数是24.5现在bmi函数有两个参数weight和height,是调用函数时必不可少的参数,顺序必须和函数定义一致。这样的参数称为位置参数;name是调用函数时可有可无的参数(不提供则使用默认值),这样的参数称为默认参数。可以有多个默认参数。为了让结果更准确,可以考虑使用最近一段时间的多个体重的平均值来计算BMI,也就是说需要输入多个体重值。当然,我们可以传递一个元组或者权重列表给weight,但是这样weight和height不是一个类型,失去了形式的美感,使用的时候也容易引起误解。最好的方法是让函数接受不确定数量的权重参数。>>>defbmi(height,*args,name='you'):i=(sum(args)/len(args))/height**2print('%s'体重指数为%0.1f'%(name,i))>>>bmi(1.75,75,name='xufive')xufive的体重指数是24.5>>>bmi(1.75,75,74)你的体重指数是24.3>>>bmi(1.75,75,74,75.5,74.7,name='xufive')xufive的体重指数是24.4其实像下面这样调用函数是没有问题的>>>weight=[75,74,75.5,74.7]>>>bmi(1.75,*weight,name='xufive')xufive的体重指数是24.4这个有点复杂,bmi函数参数一共有三种.除了位置参数和默认参数外,还有一个可变参数,即bmi函数可以接受无限数量的参数。定义函数时,变量参数名前加“*”号;在函数体中,可变参数相当于一个元组。这样一来,新的问题就产生了:三类参数应该按什么顺序定义?没有人反对位置参数是第一个。原则上默认参数放在最后,但调用时必须加上参数名(如上例),否则函数无法区分是可变参数还是默认参数。默认参数也可以放在可变参数之前(不推荐),但是调用时不能使用参数名,即使使用默认值也不能省略参数,否则函数会使用第一个值下面的可变参数(如果有的话),强制给它赋值。让我们谈谈更复杂的情况。除了上面介绍的三种类型的参数,Python函数还支持第四种类型的参数:关键字参数。关键字参数由无限数量的键值对组成。定义函数时,关键字参数名以“**”为前缀;在函数体中,关键字参数相当于一个字典。>>>defbmi(height,*args,name='you',**kwds):i=(sum(args)/len(args))/height**2print('%s'体重指数为%0.1f'%(name,i))forkeyinkwds:print('%sof%sis%s'%(name,key,str(kwds[key])))>>>bmi(1.75,75,74,75.5,74.7,name='Xufive')Xufive的体重指数是24.4>>>bmi(1.75,75,74,name='Xufive',gender='male',hobby='photography')Xufive的体重指数是24.3XufiveXufive的性别是男Xufive的爱好是摄影>>>bmi(1.75,75,74,gender='male',hobby='photography',name='Xufive')Xufive的体重指数是24.3Xufive的性别是男XufiveYourhobbyisphotography>>>bmi(1.75,75,74,75.5,74.7,gender='male',hobby='photography')你的体重指数是24.4你的性别是男你的爱好是摄影如果一个函数有了上面同时有四种类型的参数,在定义函数时参数的正确顺序应该是位置参数在前,其次是可变参数,其次是默认参数,还有keyword参数在最后。调用函数时,如果需要指定默认参数,参数名不能省略,参数名可以放在可变参数之后,关键字参数之前或之后,或者混合在其中。