#!/usr/bin/python from contextlib import contextmanager def f_1(n): print('Call f_1() ...') return list(map(lambda x: x*2, n)) def f_2(n): print('Call f_2() ...') n[0] = 100; @contextmanager def change(n): n = f_1(n); try: yield n; finally: n = f_2(n); l = list(range(4)) # [0, 1, 2, 3] with change(l) as n: print(n) # [0, 2, 4, 6] print(n) # [100, 2, 4, 6]