欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python函数中的默认参数详解》。本文的主要内容有:默认参数的概念和默认参数的示例、默认参数不能设置可变对象。

目录

1、默认参数的概念

2、默认参数的示例

3、默认参数不能设置可变对象


在调用函数时如果不指定某个参数,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不迷路!欢迎你对站长在线进行关注,评论,点赞,分享、转发!

站长在线Python精讲:在Python函数中的默认参数详解相关推荐

  1. 站长在线Python教程精讲:在Python函数中的关键字参数详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python函数中的关键字参数详解>.本文的主要内容有:关键字参数的含义和关键字参数的应用举例. 目录 1.关键字参数的含 ...

  2. python默认参数举例_Python中的默认参数详解

    文章的主题 不要使用可变对象作为函数的默认参数例如 list,dict,因为def是一个可执行语句,只有def执行的时候才会计算默认默认参数的值,所以使用默认参数会造成函数执行的时候一直在使用同一个对 ...

  3. 站长在线Python精讲:在Python函数中参数传递的位置参数详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python函数中参数传递的位置参数详解>.本文的主要内容有:实参和形参数量必须与定义时一致和实参和形参位置必须与定义时一 ...

  4. [转载] 详细介绍Python函数中的默认参数

    参考链接: Python函数中的默认参数 详细介绍Python函数中的默认参数 import datetime as dt def log_time(message, time=None): if t ...

  5. python xgboost参数_xgboost中XGBClassifier()参数详解

    常规参数 booster gbtree 树模型做为基分类器(默认) gbliner 线性模型做为基分类器 silent silent=0时,不输出中间过程(默认) silent=1时,输出中间过程 n ...

  6. Python数据可视化——matplotlib.pyplot中plt的参数详解

    matplotlib.pyplot中plt的参数详解: #平滑折线的示例 # plt.plot(xnew, ynew, marker='.', markevery=markevery, ls='-', ...

  7. 站长在线Python精讲:Python中函数的返回值

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中函数的返回值>.本文的主要内容有:函数的返回值的含义.函数设置返回值的作用.return语句位置与多条 ret ...

  8. 站长在线Python精讲:Python中正则表达式的语法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中正则表达式的语法详解>.本知识点主要内容有9点:行定位符.元字符.限定符.字符集.排除字符.选择字符.转义字符 ...

  9. 站长在线Python精讲:Python中字符串编码转换encode编码和decode解码详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中字符串编码转换:encode编码和decode解码详解>.本知识点主要内容有:常用编码简介.使用encode( ...

最新文章

  1. 百度李彦宏:人工智能是万物命脉
  2. ABAP中的Table Control编程
  3. java between_Java8 Period.between方法坑及注意事项
  4. Java黑皮书课后题第10章:10.2(BMI类)将下面的新构造方法加入BMI类中
  5. 使用VMware VSphere WebService SDK进行开发 (二)——获取虚拟机cpu的使用情况
  6. cg word List 3
  7. OFCMS 项目开源 java cms 系统 内容管理系统
  8. cdn回源php_别让CDN的回源把你的服务器拖垮,采用正确的回源策略
  9. Ajax:前台利器—Ajax
  10. 深度学习2.0-31.CIFAR100与VGG13实战
  11. 回顾|腾讯AI打败王者荣耀职业队,AI训练一天等于人类440年
  12. not optimal php,PHP错误提示It is not safe to rely on the system……的解决方法
  13. VC++ 6.0 快捷键
  14. C语言贪吃蛇用VC2022
  15. Mac上的windows 10系统,bootcamp 5更新 bootcamp 6,缺少bootcamp.msi
  16. docx4j操作word文档之替换模板数据
  17. npm ERR! code EINTEGRITY npm! ERR! shal-
  18. java 毫秒转分钟和秒_java - 将毫秒转换为分钟和秒? - 堆栈内存溢出
  19. dz60自定义配列并用qmk编译固件
  20. Banner尺寸多大最好!

热门文章

  1. 拿什么保护我们的数据安全?
  2. JAVA面向对象 类的继承
  3. java 字符串转utc时间_JAVA 本地时间字符串转UTC时间字符串
  4. 服装零售软件大合集,你想知道的都在这里!
  5. word图片无法居中,原因可能是非嵌入式!
  6. android换肤的实现方案,一种基于Android平台的一键换肤方法与流程
  7. 线上服务可用性骤降追查
  8. java爱心代码,脱单必备
  9. 计算机网络专业土味情话,土味情话大全 女生撩男生的土味情话
  10. axios 上传文件 封装_axios封装和传参