decorator_3.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from functools import wraps
  2. from copy import deepcopy
  3. def no_side_effects_decorator(func):
  4. @wraps(func)
  5. def inner(*args, **kwargs):
  6. if isinstance(args[0], (list, dict, set)):
  7. # copeed_args = tuple([args[0].copy(), args[1]])\
  8. copeed_args = tuple([deepcopy(args[0]), args[1]])
  9. print(copeed_args)
  10. # elif isinstance(args[0], dict):
  11. else:
  12. copeed_args = args
  13. return func(*copeed_args, **kwargs)
  14. return inner
  15. @no_side_effects_decorator
  16. def add_element(data, key, value=None):
  17. data[key] = value
  18. return data
  19. def test(*args, **kwargs):
  20. print(args)
  21. print(args[0])
  22. def main():
  23. my_list = [1, 2, 3]
  24. # print('Результат вызова =', add_element(my_list, 4))
  25. # print('Результат вызова =', add_element(my_list, 5))
  26. my_dict = {1: 'Hello', 2: 'World'}
  27. print('Результат вызова =', add_element(my_dict, 4, 'four'))
  28. print(my_list)
  29. # print(add_element.__name__)
  30. # test(my_list)
  31. if __name__ == '__main__':
  32. main()