Python中函数的默认值

这个问题在这里已经有了答案:

  • “最小的惊讶”和可变的默认参数30的答案

  • 是的,这是正确的行为。

    然而,从你的问题来看,这似乎并不是你所期望的。

    如果您希望它符合您的期望,请注意以下事项:

    规则1.不要使用可变对象作为默认值。

    def anyFunction( arg=[] ):
    

    不会创建一个新的列表对象。 arg的默认列表对象将在整个地方共享。

    同样

    def anyFunction( arg={} ):
    

    将不会创建一个新的字典对象。 这个默认字典将被共享。

    class MyClass( object ):
        def __init__( self, arg= None ):
            self.myList= [] if arg is None else arg 
    

    这是提供默认参数值的常用方法,该参数值是新鲜的空列表对象。


    这是一个经典的陷阱。 请参阅http://zephyrfalcon.org/labs/python_pitfalls.html,第5节:“可变默认参数”


    然后总是做这样的功能:

    def __init__ ( self, data = None ):
        if data is None:
           data = []
    
        self._data = data
    

    或者,您也可以使用data = data or [] ,但是这会阻止用户传递空参数( ''0False等)。

    链接地址: http://www.djcxy.com/p/28529.html

    上一篇: Default value in a function in Python

    下一篇: Python constructor does weird things with optional parameters