Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions Урок 6. Практическое задание/task_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,82 @@
ВНИМАНИЕ: ЗАДАНИЯ, В КОТОРЫХ БУДУТ ГОЛЫЕ ЦИФРЫ ЗАМЕРОВ (БЕЗ АНАЛИТИКИ)
БУДУТ ПРИНИМАТЬСЯ С ОЦЕНКОЙ УДОВЛЕТВОРИТЕЛЬНО
"""

from memory_profiler import profile


# Функции возвращают сумму ряда 1/n^2 для первых n элементов

@profile()
def my_func():
series = [1 / i ** 2 for i in range(1, 100000)]
sum = 0
for i in range(len(series)):
sum += series[i]
return sum


"""
Line # Mem usage Increment Occurences Line Contents
============================================================
20 19.1 MiB 19.1 MiB 1 @profile()
21 def my_func():
22 23.6 MiB 4.5 MiB 100002 series = [1 / i ** 2 for i in range(1, 100000)]
23 23.6 MiB 0.0 MiB 1 sum = 0
24 23.6 MiB 0.0 MiB 100000 for i in range(len(series)):
25 23.6 MiB 0.0 MiB 99999 sum += series[i]
26 23.6 MiB 0.0 MiB 1 return sum
"""


@profile()
def my_func_1():
series = [1 / i ** 2 for i in range(1, 100000)]
sum = 0
for i in range(len(series)):
sum += series[i]
del series
return sum


"""
Line # Mem usage Increment Occurences Line Contents
============================================================
40 19.4 MiB 19.4 MiB 1 @profile()
41 def my_func_1():
42 23.5 MiB 4.1 MiB 100002 series = [1/i**2 for i in range(1, 100000)]
43 23.5 MiB 0.0 MiB 1 sum = 0
44 23.5 MiB 0.0 MiB 100000 for i in range(len(series)):
45 23.5 MiB 0.0 MiB 99999 sum += series[i]
46 19.7 MiB -3.8 MiB 1 del series
47 19.7 MiB 0.0 MiB 1 return sum
"""


@profile()
def my_func_2():
sum = 0
for i in range(1, 100000):
sum += 1 / i ** 2

"""
Line # Mem usage Increment Occurences Line Contents
============================================================
68 20.9 MiB 20.9 MiB 1 @profile()
69 def my_func_2():
70 #return sum([1 / i ** 2 for i in range(1, 100000)])
71 20.9 MiB 0.0 MiB 1 sum = 0
72 20.9 MiB 0.0 MiB 100000 for i in range(1, 100000):
73 20.9 MiB 0.0 MiB 99999 sum += 1 / i ** 2
"""

my_func()
my_func_1()
my_func_2()

"""
ВЫВОДЫ: удаление массива перед завершением функции позволило высвободить память.
Полный отказ от массива сократил код и уменьшил максимально используемый
функцией размер памяти, однако, сами элементы ряда в итоге нигде не хранятся,
что в реальных задачах может быть неудобно
"""
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

выполнено

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

здесь мы договаривались взять минимум 3 скрипта
вижу один

34 changes: 34 additions & 0 deletions Урок 6. Практическое задание/task_3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"""
Задание 3 *.
Сделать профилировку для скриптов с рекурсией и сделать описание,
можно ли так профилировать и есть ли 'подводные камни' в профилировании?
Придумать как это решить!
Есть очень простое решение!
"""

"""
Для профилирования скриптов с рекурсией необходимо создать отдельную
функцию, которая будет входной точкой, и производить замеры для нее.
Если производить замеры для самой рекурсивной функции, то они будут
производиться при каждом ее вызове
"""

from memory_profiler import profile


def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n - 1) + fibonacci(n - 2)


@profile()
def wrapper(n):
return fibonacci(n)


n = int(input("Введите номер члена последовательности: "))
print(f"Последовательность Фибоначчи: {fibonacci(n)}")

wrapper(n)
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

выполнено