[FSUG PD] oops! la versione corretta è questa:

alessandro medici alexxandro.medici a gmail.com
Lun 8 Feb 2016 15:21:36 CET


import functools
print()
print(1)
def funzEsterna(x, y, z):
    print(2)
    print('sono in funzEsterna', funzEsterna, 'con x,y,z = ', x, y, z)
    def mioDecoratore(funz):
        print(3)
        print('sono in mioDecoratore ',mioDecoratore,' per ', funz, " con
x,y,z = ", x, y, z)
        @functools.wraps(funz)
        def mioWrapper(uno, due):
            print(4)
            print('sono in mioWrapper !!! ',  mioWrapper, ' per ', funz, "
con due, uno = ", due, uno)
            funz(due * y, uno * z)
        print(5)
        return mioWrapper
    print(6)
    return mioDecoratore
c = 1
d = 2
e = 3
print(7)
@funzEsterna(c, d, e)
def foo(a, b):
    print(8)
    print('sono in foo ', foo,' con a, b =', a, b)
    print
    return print()


print(10)
print('chiamo !!!',foo,' con 12, 23')
foo(12, 23)
print(11)
print('chiamo !!!',foo,' con 33, 44')
foo(33, 44)
print(12)

'''
1
7
2
sono in funzEsterna <function funzEsterna at 0x7ff355f18f28> con x,y,z =  1
2 3
6
3
sono in mioDecoratore  <function funzEsterna.<locals>.mioDecoratore at
0x7ff355da89d8>  per  <function foo at 0x7ff355da8a60>  con x,y,z =  1 2 3
5
10
chiamo !!! <function foo at 0x7ff355da8ae8>  con 12, 23
4
sono in mioWrapper !!!  <function foo at 0x7ff355da8ae8>  per  <function
foo at 0x7ff355da8a60>  con due, uno =  23 12
8
sono in foo  <function foo at 0x7ff355da8ae8>  con a, b = 23 12
9
11
chiamo !!! <function foo at 0x7ff355da8ae8>  con 33, 44
4
sono in mioWrapper !!!  <function foo at 0x7ff355da8ae8>  per  <function
foo at 0x7ff355da8a60>  con due, uno =  44 33
8
sono in foo  <function foo at 0x7ff355da8ae8>  con a, b = 44 33
9
12
alex a del:~$ vim decoratori_con_variabili.py
alex a del:~$ python3 decoratori_con_variabili.py

1
7
2
sono in funzEsterna <function funzEsterna at 0x7f654500d9d8> con x,y,z =  1
2 3
6
3
sono in mioDecoratore  <function funzEsterna.<locals>.mioDecoratore at
0x7f654500da60>  per  <function foo at 0x7f654500dae8>  con x,y,z =  1 2 3
5
10
chiamo !!! <function foo at 0x7f654500db70>  con 12, 23
4
sono in mioWrapper !!!  <function foo at 0x7f654500db70>  per  <function
foo at 0x7f654500dae8>  con due, uno =  23 12
8
sono in foo  <function foo at 0x7f654500db70>  con a, b = 46 36
9
11
chiamo !!! <function foo at 0x7f654500db70>  con 33, 44
4
sono in mioWrapper !!!  <function foo at 0x7f654500db70>  per  <function
foo at 0x7f654500dae8>  con due, uno =  44 33
8
sono in foo  <function foo at 0x7f654500db70>  con a, b = 88 99
9
12

'''

output:
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.fsugpadova.org/pipermail/fsug-pd/attachments/20160208/22fa5b3a/attachment.htm>


Maggiori informazioni sulla lista fsug-pd