<div dir="ltr"><div>import functools</div><div>print()</div><div>print(1)</div><div>def funzEsterna(x, y, z):</div><div>    print(2)</div><div>    print('sono in funzEsterna', funzEsterna, 'con x,y,z = ', x, y, z)</div><div>    def mioDecoratore(funz):</div><div>        print(3)</div><div>        print('sono in mioDecoratore ',mioDecoratore,' per ', funz, " con x,y,z = ", x, y, z)</div><div>        @functools.wraps(funz)</div><div>        def mioWrapper(uno, due):</div><div>            print(4)</div><div>            print('sono in mioWrapper !!! ',  mioWrapper, ' per ', funz, " con due, uno = ", due, uno)</div><div>            funz(due * y, uno * z)</div><div>        print(5)</div><div>        return mioWrapper</div><div>    print(6)</div><div>    return mioDecoratore</div><div>c = 1</div><div>d = 2</div><div>e = 3</div><div>print(7)</div><div>@funzEsterna(c, d, e)</div><div>def foo(a, b):</div><div>    print(8)</div><div>    print('sono in foo ', foo,' con a, b =', a, b)</div><div>    print</div><div>    return print()</div><div><br></div><div><br></div><div>print(10)</div><div>print('chiamo !!!',foo,' con 12, 23')</div><div>foo(12, 23)</div><div>print(11)</div><div>print('chiamo !!!',foo,' con 33, 44')</div><div>foo(33, 44)</div><div>print(12)</div><div><br></div><div>'''</div><div><div>1</div><div>7</div><div>2</div><div>sono in funzEsterna <function funzEsterna at 0x7ff355f18f28> con x,y,z =  1 2 3</div><div>6</div><div>3</div><div>sono in mioDecoratore  <function funzEsterna.<locals>.mioDecoratore at 0x7ff355da89d8>  per  <function foo at 0x7ff355da8a60>  con x,y,z =  1 2 3</div><div>5</div><div>10</div><div>chiamo !!! <function foo at 0x7ff355da8ae8>  con 12, 23</div><div>4</div><div>sono in mioWrapper !!!  <function foo at 0x7ff355da8ae8>  per  <function foo at 0x7ff355da8a60>  con due, uno =  23 12</div><div>8</div><div>sono in foo  <function foo at 0x7ff355da8ae8>  con a, b = 23 12</div><div>9</div><div>11</div><div>chiamo !!! <function foo at 0x7ff355da8ae8>  con 33, 44</div><div>4</div><div>sono in mioWrapper !!!  <function foo at 0x7ff355da8ae8>  per  <function foo at 0x7ff355da8a60>  con due, uno =  44 33</div><div>8</div><div>sono in foo  <function foo at 0x7ff355da8ae8>  con a, b = 44 33</div><div>9</div><div>12</div><div>alex@del:~$ vim decoratori_con_variabili.py</div><div>alex@del:~$ python3 decoratori_con_variabili.py </div><div><br></div><div>1</div><div>7</div><div>2</div><div>sono in funzEsterna <function funzEsterna at 0x7f654500d9d8> con x,y,z =  1 2 3</div><div>6</div><div>3</div><div>sono in mioDecoratore  <function funzEsterna.<locals>.mioDecoratore at 0x7f654500da60>  per  <function foo at 0x7f654500dae8>  con x,y,z =  1 2 3</div><div>5</div><div>10</div><div>chiamo !!! <function foo at 0x7f654500db70>  con 12, 23</div><div>4</div><div>sono in mioWrapper !!!  <function foo at 0x7f654500db70>  per  <function foo at 0x7f654500dae8>  con due, uno =  23 12</div><div>8</div><div>sono in foo  <function foo at 0x7f654500db70>  con a, b = 46 36</div><div>9</div><div>11</div><div>chiamo !!! <function foo at 0x7f654500db70>  con 33, 44</div><div>4</div><div>sono in mioWrapper !!!  <function foo at 0x7f654500db70>  per  <function foo at 0x7f654500dae8>  con due, uno =  44 33</div><div>8</div><div>sono in foo  <function foo at 0x7f654500db70>  con a, b = 88 99</div><div>9</div><div>12</div></div><div><br></div><div>'''</div><div><br></div><div>output: </div></div>