自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
调用函数时,如果没有指定某个参数将抛出异常,为了解决这个问题,我们可以为参数设置默认值,即在定义函数时,直接指定形式参数的默认值。这样,当没有传入参数时,则直接使用定义函数时设置的默认值。定义带有默认值参数的函数的语法格式如下:
def functionname(…,[parameter1 = defaultvalue1]):
[functionbody]
参数说明:
l functionname:函数名称,在调用函数时使用。
l parameter1 = defaultvalue1:可选参数,用于指定向函数中传递的参数,并且为该参数设置默认值为defaultvalue1。
l functionbody:可选参数,用于指定函数体,即该函数被调用后,要执行的功能代码。
注意:在定义函数时,指定默认的形式参数必须在所有参数的最后,否则将产生语法错误。
例如,修改根据身高、体重计算BMI指数的函数fun_bmi(),为其第一个参数指定默认值,修改后的代码如下:
def fun_bmi(height,weight, person = "路人"):
'''功能:根据身高和体重计算BMI指数
person:姓名
height:身高,单位:米
weight:体重,单位:千克
'''
print(person + "的身高:" + str(height) + "米 \t 体重:" + str(weight) + "千克")
bmi=weight/(height*height) # 用于计算BMI指数,公式为:BMI:体重/身高的平方
print(person + "的BMI指数为:"+str(bmi)) # 输出BMI指数
# 判断身材是否合理
if bmi<18.5:
print("您的体重过轻 ~@_@~\n")
if bmi>=18.5 and bmi<24.9:
print("正常范围,注意保持 (-_-)\n")
if bmi>=24.9 and bmi<29.9:
print("您的体重过重 ~@_@~\n")
if bmi>=29.9:
print("肥胖 ^@_@^\n")
然后调用该函数,不指定第一个参数,代码如下:
fun_bmi(1.73,60) # 计算BMI指数
执行结果如下:
路人的身高:1.73米 体重:60千克
路人的BMI指数为:20.04744562130375
正常范围,注意保持 (-_-)
多学两招:在Python中,可以使用“函数名.__defaults__”查看函数的默认值参数的当前值,其结果是一个元组。例如,显示上面定义的fun_bmi()函数的默认值参数的当前值,可以使用“fun_bmi.__defaults__”,结果为“('路人',)”。
另外,使用可变对象作为函数参数的默认值时,多次调用可能会导致意料之外的情况。例如,编写一个名称为demo()的函数,并为其设置一个带默认值的参数,代码如下:
def demo(obj=[]): # 定义函数并为参数obj指定默认值
print("obj的值:",obj)
obj.append(1)
调用demo()函数,代码如下:
demo() # 调用函数
将显示以下结果:
obj的值: []
连续两次调用demo()函数,并且都不指定实际参数,代码如下:
demo() # 调用函数
demo() # 调用函数
将显示以下结果:
obj的值: []
obj的值: [1]
从上面的结果看,这显然不是我们想要的结果。为了防止出现这种情况,最好使用None作为可变对象的默认值,这时还需要加上必要的检查代码。修改后的代码如下:
def demo(obj=None):
if obj==None:
obj = []
print("obj的值:",obj)
obj.append(1)
连续两次调用demo()函数,并且都不指定实际参数,代码如下:
demo() # 调用函数
demo() # 调用函数
将显示以下运行结果:
obj的值: []
obj的值: []
说明:定义函数时,为形式参数设置默认值要牢记一点:默认参数必须指向不可变对象。