本文研究的主要是Python中的默认参数的相关内容,具体如下。

熟悉C++语言的可以知道,C++语言中的默认参数是写在函数声明中的,为语法糖,与函数的调用无关,是在函数调用的时候由编译器补齐参数然后进行调用。

而Python中的默认参数与其有相当大的不一样,如下例中的代码执行结果会是什么呢?

def test_parameter(a, dfp=[]):

dfp.append(a)

print(dfp)

test_parameter(1)

test_parameter(2)

test_parameter(3)

从结果中可以看到其结果如下,与我们期望完全不一致:

[1]

[1, 2]

[1, 2, 3]

分析

为什么Python的默认参数是这样的表现,需要从Python的函数定义说起。Python中 def 实际上是可执行语句,执行 def 的时候会创建一个函数对象,而默认参数也会在执行 def 语句的时候计算出来并存在函数的_defaults_属性中。

def test_parameter(a, dfp=[]):

dfp.append(a)

print(id(dfp))

test_parameter(1)

test_parameter(2)

print(test_parameter.__defaults__)

print(id(test_parameter.__defaults__[0]))

结果如下,可见调用函数时使用的默认参数和_defaults_中的对象为同一对象:

140109485401224

140109485401224

([1, 2],)

140109485401224

使用

在明白上述原理后,可以知道以后在使用默认参数的时候需要注意,如果默认参数是可变对象则需要判断是否每次调用函数时是共享默认参数还是产生新对象。如果是新生成对象,常采用None作为默认参数占位,如果判断当前为None,则新建可变对象使用。

def test(a, dfp=None):

if dfp is None:

dfp = []

pass #使用dfp

总结

以上就是本文关于Python中的默认参数实例分析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

python默认参数举例_Python中的默认参数实例分析相关推荐

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

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

  2. python中max函数用法_Python中max函数用法实例分析

    Python中max函数用法实例分析 更新时间:2015年07月17日 15:45:09 作者:优雅先生 这篇文章主要介绍了Python中max函数用法,实例分析了Python中max函数的功能与使用 ...

  3. python函数**什么意思_python中函数的参数是什么意思

    本文主要讲解python中函数的参数及参数的类型 默认参数def enroll(name, gender, age=6, city='Beijing'): print('name:', name) p ...

  4. python管道怎么使用_python中管道用法入门实例

    python中管道用法入门实例 本文实例讲述了python中管道用法.分享给大家供大家参考.具体如下: #!coding=utf-8 import multiprocessing def consum ...

  5. python decimal类型转化_python中的decimal类型转换实例详解

    [Python标准库]decimal--定点数和浮点数的数学运算 作用:使用定点数和浮点数的小数运算. Python 版本:2.4 及以后版本 decimal 模块实现了定点和浮点算术运算符,使用的是 ...

  6. python输出变量代码_Python中变量的输入输出实例代码详解

    1.变量的输入: input函数: input() input("请输入银行卡密码") password = input("请输入银行卡密码") 变量名 = i ...

  7. python的empty函数_python中numpy.empty()函数实例讲解

    在使用python编程的过程中,想要快速的创建ndarray数组,可以使用numpy.empty()函数.numpy.empty()函数所创建的数组内所有元素均为空,没有实际意义,所以它也是创建数组最 ...

  8. python迭代器创建序列_Python 中迭代器与生成器实例详解

    Python 中迭代器与生成器实例详解 本文通过针对不同应用场景及其解决方案的方式,总结了Python中迭代器与生成器的一些相关知识,具体如下: 1.手动遍历迭代器 应用场景:想遍历一个可迭代对象中的 ...

  9. python中的参数函数_python中函数与参数的简介

    函数 函数就是具有某个具体功能的工具 而使用用函数能提供开发效率,减少代码冗余,提高程序的扩展性. 在Python中,函数有五大要点:分别是def.函数名.函数体.参数.返回值,以及两个英文版符号,分 ...

最新文章

  1. 微信内置浏览器无法清除缓存问题
  2. PHP用CURL伪造IP和来源
  3. jquery-删除当前行的数据
  4. LeetCode 题 - 27. 移除元素 python实现
  5. 微信公众号开发之授权获取用户信息
  6. SpringMVC使用CommonsMultipartResolver上传文件
  7. Unity3d - 打飞碟
  8. 微信域名防屏蔽防封系统,轻松微信中域名网站被屏蔽被封的问题
  9. 三国演义亲和度python_用python分析四大名著之三国演义
  10. 好用的用户准入控制管理系统
  11. Ajax和Json使用
  12. marvin java_使用Java中的Marvin框架去除轮廓
  13. 【3D点云】弱监督点云分割(论文解读 CVPR2020)
  14. websocket ws + wss 通信
  15. HTTPS/HTTP网络代理
  16. 环信IM即时通讯集成-遇到问题及创建默认会话+默认欢迎语
  17. Outsider(HNOI2019)
  18. 奥维奥:新零售下,家具家居该如何乘风破浪?
  19. nginx修改成非root用户启动
  20. 248Echarts - 3D 曲面(Parametric Surface Rose)

热门文章

  1. ios开发之.pch文件的使用
  2. SQL Server 自定义函数 返回树结构函数
  3. java8 stream to map_Java 8 Stream Api 中的 map和 flatMap 操作
  4. springboot整合redis修改分区
  5. input文件上传代码片段
  6. 尼康相机报错err_数码相机遇到这12种错误,自己动手就能解决,再不用找人维修...
  7. 使用JWT实现单点登录(完全跨域方案)
  8. 定期定量采购_?采购计划员必备:各种物料采购计划与订单制定的技巧与方法...
  9. nginx 反向proxy多个 tomcat,负载均衡
  10. 2019 DDCTF 部分writeup