站长在线Python精讲:在Python函数中的默认参数详解
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python函数中的默认参数详解》。本文的主要内容有:默认参数的概念和默认参数的示例、默认参数不能设置可变对象。
欢迎你来到站长在线的站长学堂学习python知识,本文学习的是《在Python函数中的默认参数详解》。本文的主要内容有:默认参数的概念和默认参数的示例、默认参数不能设置可变对象。
在调用函数时如果不指定某个参数,Python 解释器会抛出异常。为了解决这个问题,Python 允许为参数设置默认值。
1、默认参数的概念
默认参数也叫参数的默认值,即在定义函数时,直接指定形式参数的默认值。这样,当没有传入参数时,则直接使用定义函数时设置的默认值。
定义带有默认值参数的函数的语法格式如下:
def functionname(...,[parameter1 = defaultvalue1]):
[functionbody]
其中,相关参数说明如下:
functionname:函数名称,在调用函数时使用;
parameter1 = defaultvalue1:可选参数,用于指定向函数中传递的参数,并且为该参数设置默认值为defaultvalue1;
functionbody:可选参数,用于指定函数体,即该函数被调用后,要执行的功能代码。
当然,上面的内容也可以使用中文说明:
def 函数名(...,形参名,形参名=默认值):
代码块
站长在线特别提醒:在使用此格式定义函数时,指定有默认值的形式参数必须在所有没默认值参数的最后,否则会产生语法错误。
2、默认参数的示例
例如:定义一个同学的语文,数学,英语的成绩,并且输出他的成绩,
#可写函数说明
def chengji(shuxue=98,yingyu=90,yuwen=92):
"打印任何传入的字符串"
print ("语文: ",yuwen)
print ("数学: ",shuxue)
print ("英语: ",yingyu)
return
#调用chengji函数
chengji(shuxue=100,yingyu=100,yuwen=100)
print("----------")
chengji(shuxue=80,yingyu=80)
运行结果如下:
语文: 100
数学: 100
英语: 100
----------
语文: 92
数学: 80
英语: 80
>>>
从上面的运行结果可以看出,我们对上面的成绩定义了两次,第一次全部定义为100分,结果显示为100分,第二次定义了两个80分的,有一个没有定义,就调用了默认参数了。
Pyhton 中,可以使用“函数名.__defaults__”查看函数的默认值参数的当前值,其返回值是一个元组。以本节中的 chengji() 函数为例,在最后一行代码后面添加如下代码:
print(chengji.__defaults__)
运行以后,结果为:
语文: 100
数学: 100
英语: 100
----------
语文: 92
数学: 80
英语: 80
(98, 90, 92)
>>>
3、默认参数不能设置可变对象
使用可变对象作为函数参数的默认值时,多次调用可能会导致意料之外的情况。例如,编写一个名称为demo()的函数,并为其设置一个带默认值的参数,代码如下:
def demo(a=[]): # 定义函数并为参数a指定默认值
print("a的值: ",a)
a.append(1)
调用demo()函数,代码如下:
def demo(a=[]): # 定义函数并为参数a指定默认值
print("a的值: ",a)
a.APPend(1)
demo() # 调用demo()函数
将显示以下结果:
a的值: []
连续两次调用demo()函数,并且都不指定实际参数,代码如下:
def demo(a=[]): # 定义函数并为参数a指定默认值
print("a的值: ",a)
a.append(1)
demo() # 调用demo()函数
demo() # 调用demo()函数
将显示以下结果:
a的值: []
a的值: [1]
>>>
从上面的结果看,这显然不是我们想要的结果。为了防止出现这种情况,最好使用None作为可变对象的默认值,这时还需要加上必要的检查代码。修改后的代码如下:
def demo(a=None):
if a==None:
a=[]
print("a的值: ",a)
a.append(1)
demo()
demo()
运行结果如下:
a的值: []
a的值: []
>>>
上面的问题,就告诉我们:定义函数时,为形式参数设置默认值要牢记一点:默认参数必须指向不可变对象。
到此为止,站长在线讲解的《在Python函数中的默认参数详解》中的默认参数的概念和默认参数的示例,都讲解完毕了。有不懂的可以给我留言哦!
在下一个知识点,站长在线就来讲解《在Python函数中的可变参数》。关注站长在线,学习Python不迷路!欢迎你对站长在线进行关注,评论,点赞,分享、转发!
本文地址:https://www.olzz.com/pythonmorencanshu.html
阿里云虚拟主机1G空间,120元一年
香港、美国虚拟主机100元一年,1000元永久
腾讯云双十一0.4折起,2核8G5M三年仅700元,2核4G8M三年仅198元
猜你喜欢