Behavior of default parameter in a function

Gary Herron gherron at islandtraining.com
Thu Mar 11 11:48:20 EST 2010


This is addressed in the FAQ.

  
http://www.python.org/doc/faq/general/#why-are-default-values-shared-between-objects

jitendra gupta wrote:
>
> def foo(x = [0]):
> x[0] = x[0] + 1
> return x[0]
>
> def soo(x = None):
> if x is None:
> x = [0]
> x[0] = x[0] + 1
> return x[0]
>
> >>> foo()
> 1
> >>>foo()  #See the behavior incremented by one 
> 2
> >>>foo([1]) # but here based on given number 
> 2
> >>>foo() 
> 3
> >>>foo([1])
> 2
> >>>foo()
> 4
>
> >>>soo()
> 1
> >>>soo()
> 1
> >>>soo([1])
> 2
> >>>soo()
> 1
>
> Why foo() is incremented by 1 always when we are not passing any argument,
>  but this is not happening in soo() case, In which scenario 
> we will use these type of  function.'
>
> Thanks 
> Jitendra Kumar
>




More information about the Python-list mailing list