Default Argument Question

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Paulo J. Matos

    Default Argument Question

    Hi all,

    Going through the tutorial brought up a question. Consider the functions:

    def f(a, L=[]):
    L.append(a)
    return L

    print f(3)
    print f(9)
    print f(7)

    def f1(i = 0):
    i = i + 1
    print i

    f1()
    f1()
    f1()
    f1()

    Since the f accumulates the values in L, I was expecting to see i
    printing 1,2,3,4 but this doesn't happen.
    Can someone please explain why and what is going on beneath the veil?

    Cheers,

    --
    Paulo Jorge Matos - pocmatos @ gmail.com
  • Bruno Desthuilliers

    #2
    Re: Default Argument Question

    Paulo J. Matos a écrit :
    Hi all,
    >
    Going through the tutorial brought up a question. Consider the functions:
    >
    def f(a, L=[]):
    L.append(a)
    return L
    >
    print f(3)
    print f(9)
    print f(7)
    >
    def f1(i = 0):
    i = i + 1
    print i
    >
    f1()
    f1()
    f1()
    f1()
    >
    Since the f accumulates the values in L, I was expecting to see i
    printing 1,2,3,4 but this doesn't happen.
    Can someone please explain why and what is going on beneath the veil?
    In the first case, you are mutating L. In the second, you are rebinding
    the local name i. IOW, you are comparing oranges and apples. The
    corresponding code using a list would be:
    >>def f2(arg, alist=[]):
    .... alist = alist + [arg]
    .... print alist
    ....

    And it behaves just like your f1 function:
    >>f2(1)
    [1]
    >>f2(1)
    [1]
    >>f2(1)
    [1]
    >>f2(1)
    [1]
    >>>

    But anyway: you just couldn't mutate i in f1, since integers are
    immutables...

    HTH

    Comment

    Working...