[Python-Dev] nested scopes confusion

Thomas Heller thomas.heller@ion-tof.com
Tue, 4 Dec 2001 20:35:19 +0100


I would have expected the following code to print
1, 2, ..., 9. Instead it prints 25, 25, 25, .. 25.

def functions():
    result = []
    for i in range(10):
        def mth(*args): return i
        result.append(mth)
    i = 25
    return result

for mth in functions():
    print mth()

Reading PEP227, I can (barely) understand why it behaves this way.

How do I achieve the desired effect? Note that the default argument
trick (def mth(i=i): ...) does not work because *args is present.

Thomas