`
剑锋凛冽
  • 浏览: 75245 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Python函数参数默认值的陷阱

 
阅读更多

阅读下面一段Python代码

 

def testMutablePara1(a,l=[]):
	l.append(a)
	return l
print testMutablePara1(1)
print testMutablePara1(2)

 初看之下,这段代码在第二次应该输出[2]

但是运行结果却是

 

[1]

[1, 2]

为什么呢?

这是因为Python在处理函数定义时,除了将函数的代码定义到内存中以外,同时会将默认值参数的值作为对象存放到内存中,以后每次调用都使用的都是内存中该默认值的对象,所以当参数默认值是mutable对象,如list、dict等时,每次调用都有可能使结果出现错误的结果。

替代的方法是,将默认值参数用None,而在使用之前显式地进行初始化

如下所示

 

def testMutablePara2(a,l=None):
	if l==None:
		l=[]
	l.append(a)
	return l
print testMutablePara2(1)
print testMutablePara2(2)

 这样就能输出符合预期的结果了。

 

参考http://www.cnblogs.com/ukessi/archive/2010/01/25/python-function-default-parameter-value-problem.html

 

分享到:
评论

相关推荐

    Python定义函数时参数有默认值问题解决

    这篇文章主要介绍了Python定义函数时参数有默认值问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在定义函数的时候,如果函数的参数有默认值,有两种...

    python中函数默认值使用注意点详解

    ### Python中函数默认值使用注意点详解 在Python编程中,函数是构建程序的基本单元之一。函数不仅可以提高代码的复用率,还可以让程序结构更加清晰。为了使函数更加灵活和方便地使用,Python允许我们在定义函数时为...

    深入讨论Python函数的参数的默认值所引发的问题的原因

    本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 陷阱重现 我们就用实际的举例来演示我们今天所要讨论的主要内容。 下面一段代码定义了一个名为 generate_new_list_with 的...

    深入讲解Python函数中参数的使用及默认参数的陷阱

    本文将深入探讨Python函数中参数的使用以及默认参数可能带来的陷阱。 首先,我们来看必选参数,它们是函数调用时必须提供的参数。例如,一个简单的函数`add(a, b)`需要两个参数`a`和`b`,没有提供这些参数就会导致...

    Python函数默认参数常见问题及解决方案.docx

    Python函数的默认参数是编程中常见的特性,它允许我们在调用函数时省略某些参数的值,这些参数将使用在函数定义时设定的默认值。然而,如果不正确地使用默认参数,可能会导致一些意外的问题。以下是一些关于Python...

    Python函数中参数是传递值还是引用详解

    ### Python函数中参数是传递值还是引用详解 在探讨Python函数参数传递机制之前,我们首先需要理解Python中变量与对象的关系。不同于C/C++等语言,Python中的变量更像是对象的引用或标签,而不是一个单独的内存空间...

    Python中设置变量作为默认值时容易遇到的错误

    在Python编程中,新手往往会遇到关于函数默认参数值的一些陷阱,这主要是因为Python函数默认参数的求值时机与一般预期存在差异。具体来说,Python中的函数默认参数值是在函数定义时确定的,而非在函数调用时确定。这...

    Python函数的默认参数设计示例详解

    为了避开这个陷阱,推荐的做法是使用不可变类型作为默认值,或者在函数内部进行参数的初始化,这样可以确保每次调用函数时参数都是一样的。例如,当需要默认参数时,可以设置默认值为None,然后在函数内部检查该参数...

    详细介绍Python函数中的默认参数

    Python函数中的默认参数是函数定义时为参数设置的预设值。这允许在不提供该参数的情况下调用函数,此时函数会使用默认值。默认参数在函数定义时被计算一次,因此它们通常被认为是在函数作用域内的静态值。这一点尤其...

    python 默认参数问题的陷阱

    在Python编程中,函数的默认参数是一个非常方便的功能,它允许我们在定义函数时为参数指定一个默认值。这样,在调用函数时如果不提供该参数,则自动使用这个默认值。然而,关于Python中的默认参数存在一些容易忽视的...

    Python进阶-函数默认参数(详解)

    ### Python进阶-函数默认参数详解 #### 一、默认参数概述 在Python中,函数可以接受多种类型的参数,包括位置参数、关键字参数、可变参数等。其中一种非常实用的功能是**默认参数**。默认参数允许我们在定义函数时...

    python官方3.0rc1版本msi安装包

    7. **函数定义**:函数参数的默认值在函数定义时被计算一次,而不是每次调用时,解决了Python 2中的一个常见陷阱。 8. **元类和类型系统**:Python 3.0的元类机制更加强大且灵活,同时引入了新的`type`函数作为元类...

    python 3.6.4最新中文手册(pdf)和英文手册合集(chm)

    5. **函数参数的默认值**:在3.6版本中,函数参数的默认值被正确地按照定义顺序只计算一次,避免了之前的陷阱。 对于入门级的Python学习者,这份中文教程将帮助你快速理解语言基础,并能逐步掌握高级特性和编程技巧...

    Python如何定义有默认参数的函数

    ### Python如何定义有默认参数的函数 在Python中定义带有默认参数值的函数是一种非常实用且常见的编程技巧。本文将详细介绍如何定义此类函数,并探讨一些需要注意的重要细节。 #### 定义有默认参数的函数 当你...

    什么是python的必选参数

    在Python中,必选参数在函数定义时位于参数列表的最前面,它们没有默认值,因此在调用函数时,这些参数的位置和数量必须与函数定义完全匹配。例如: ```python import math def cal(n): return n * n var = cal...

    小议Python中自定义函数的可变参数的使用及注意点

    总结来说,在Python中使用自定义函数的可变参数时,理解其工作原理和注意事项至关重要,特别是当涉及到默认值参数和可变类型时。正确地处理这些细节可以避免潜在的陷阱,提高代码的可靠性和可维护性。

    python3_7_4.zip

    8. **安全的默认值**:函数默认参数不再保存引用,而是每次调用时创建新的对象,避免了常见的默认值陷阱。 对于32位和64位的选择,主要取决于你的系统和需求。32位版本在较旧的硬件上运行良好,但内存使用有限,...

    生物信息学编程使用python

    6. **默认参数值**:定义函数时可以为参数设置默认值,当调用时未提供该参数值时,则使用默认值。 7. **模块使用**:通过导入模块的方式可以复用已有的代码和功能。 #### 生物信息学中的Python应用 1. **基因组...

    浅谈python3 构造函数和析构函数

    在Python 3中,构造函数和析构函数是面向对象编程中的两个关键概念,它们用于对象的生命周期管理。本文将详细讲解这两个概念及其在Python中的实现。 首先,构造函数是用于初始化新创建的对象的特殊方法。在Python中...

    Python中的默认参数实例分析

    此外,Python还支持默认参数,这使得函数在调用时可以不提供某些参数的值,因为它们已经有了预设的默认值。本文将深入探讨Python中的默认参数及其行为特性。 默认参数在函数定义时被赋值,并且这个值在函数的生命...

Global site tag (gtag.js) - Google Analytics