TelenkovDmitry 3 maanden geleden
bovenliggende
commit
6dffae7328
2 gewijzigde bestanden met toevoegingen van 74 en 4 verwijderingen
  1. 30 4
      courses/python_func/decorator.py
  2. 44 0
      courses/python_func/decorator_3.py

+ 30 - 4
courses/python_func/decorator.py

@@ -175,7 +175,32 @@ def validate_all_kwargs_int_pos(func):
     return wrapper
 
 
-@validate_all_kwargs_int_pos
+def filter_even(func):
+    def wrapper(*args, **kwargs):
+        my_list = []
+        for val in args:
+            if isinstance(val, int):
+                if val%2 == 0:
+                    my_list.append(val)
+            if (isinstance(val, (str, list, tuple, dict))):
+                if len(val)%2 == 0:
+                    my_list.append(val)
+        return func(*my_list, **kwargs)
+    return wrapper
+
+
+def delete_short(func):
+    def wrapper(*args, **kwargs):
+        my_dict = {}
+        for key, value in kwargs.items():
+            if len(key) > 4:
+                my_dict[key] = value
+        return func(*args, **my_dict)
+    return wrapper
+
+
+@filter_even
+@delete_short
 def concatenate(*args, **kwargs):
     result = ""
     for arg in args + tuple(kwargs.values()):
@@ -183,12 +208,13 @@ def concatenate(*args, **kwargs):
     return result
 
 
-def filter_even(func):
-    
 
 
 
 def main():
+
+    print(concatenate("Я", "хочу", "Выучить", "Питон", a="За", qwerty=10, c="Месяцев"))
+
     # res = say_hello_to('Vasya', 'Ivanov')
     # print(f'{res=}')
 
@@ -206,7 +232,7 @@ def main():
 
     # print(concatenate("Ну", "Когда", "Уже", "Я", "Выучу", "Питон?"))
     # print(concatenate(a="Я", b="Выучу", c="Этот", d="Питон", e="!"))
-    print(concatenate(a=10, b=20, c=50))
+    # print(concatenate(a=10, b=20, c=50))
 
 
 if __name__ == '__main__':

+ 44 - 0
courses/python_func/decorator_3.py

@@ -0,0 +1,44 @@
+from functools import wraps
+from copy import deepcopy
+
+
+def no_side_effects_decorator(func):
+    @wraps(func)
+    def inner(*args, **kwargs):
+        if isinstance(args[0], (list, dict, set)):
+            # copeed_args = tuple([args[0].copy(), args[1]])\
+            copeed_args = tuple([deepcopy(args[0]), args[1]])
+            print(copeed_args)
+        # elif isinstance(args[0], dict):
+
+        else:
+            copeed_args = args
+        return func(*copeed_args, **kwargs)
+    return inner
+
+
+@no_side_effects_decorator
+def add_element(data, key, value=None):
+    data[key] = value
+    return data
+
+def test(*args, **kwargs):
+    print(args)
+    print(args[0])
+
+
+def main():
+    my_list = [1, 2, 3]
+    # print('Результат вызова =', add_element(my_list, 4))
+    # print('Результат вызова =', add_element(my_list, 5))
+    my_dict = {1: 'Hello', 2: 'World'}
+    print('Результат вызова =', add_element(my_dict, 4, 'four'))
+    print(my_list)
+    # print(add_element.__name__)
+    # test(my_list)
+
+
+
+
+if __name__ == '__main__':
+    main()