This media is not supported in your browser
VIEW IN TELEGRAM
1️⃣ *args и **kwargs
🔗 Как вы уже заметили, к звездочкам добавились имена args и kwargs.
🔗 Вот вам пример:
Здесь, *args собирает все аргументы после первого a и сохраняет их в args в виде кортежа (2, 3, 4).
‼️ Теперь пример с **kwargs
**kwargs собирает все переданные именованные аргументы в словарь.
⁉️ Зачем нужны вообще эти имена?
🔗 Как вы уже заметили, к звездочкам добавились имена args и kwargs.
🔗 Вот вам пример:
def my_function(a, *args):
print("a:", a)
print("args:", args)
my_function(1, 2, 3, 4) # args будет содержать (2, 3, 4)
# Вывод:
a: 1
args: (2, 3, 4)
Здесь, *args собирает все аргументы после первого a и сохраняет их в args в виде кортежа (2, 3, 4).
‼️ Теперь пример с **kwargs
def my_function(**kwargs):
print(kwargs)
my_function(name="Brovscki", age=25) # Вывод: {'name': 'Brovscki', 'age': 25}
my_function(city="Zalupinsk", country="USA") # Вывод: {'city': 'Zalupinsk', 'country': 'UK'}
**kwargs собирает все переданные именованные аргументы в словарь.
⁉️ Зачем нужны вообще эти имена?
Имена, такие как args и kwargs, нужны для того, чтобы у нас была переменная, через которую можно обращаться к собранным аргументам внутри функции.
8❤🔥3❤1👍1🥰1🤯1
🧑💻 Всем доброе утро! Давно мы с вами не разбирали Алгоритмы (у нас даже есть навигация, но это по секрету)
🔗 С функциями разобрались базово, теперь можно перейти к такому элегантному методу решения задач, как Р Е К У Р С И Я
💬 Так, для начала разберемся, что это и для чего это нужно:
🔗 Рекурсивные функции состоят из двух частей: базового случая и рекурсивного случая. И вот вам пример из реальной жизни:
✔️ П Р И М Е Р
⚙️ Все мы знаем традиционную Русскую матрешку. Внутри самой большой находятся уменьшенные копии. Каждая матрешка открывается и обнаруживает внутри себя ещё одну, но меньшего размера. Этот процесс продолжается до тех пор, пока не останется самая маленькая матрёшка, которую уже открыть нельзя — это и есть базовый случай.
🟰Базовый случай — самая маленькая кукла, которую нельзя открыть.
🟰Рекурсивный случай — каждая кукла содержит в себе другую куклу.
🟰Базовый случай (условие выхода) — это условие, при котором функция завершает вызовы и возвращает результат, не вызывая себя снова. (Наша маленькая матрешка)
🟰Рекурсивный случай — это часть функции, где функция вызывает саму себя с другими параметрами, приближаясь к базовому случаю. (Каждая матрешка, кроме самой маленькой)
🔗 С функциями разобрались базово, теперь можно перейти к такому элегантному методу решения задач, как Р Е К У Р С И Я
💬 Так, для начала разберемся, что это и для чего это нужно:
Рекурсия — это техника в программировании, при которой функция вызывает сама себя для решения подзадачи, которая является частью исходной задачи.
🔗 Рекурсивные функции состоят из двух частей: базового случая и рекурсивного случая. И вот вам пример из реальной жизни:
✔️ П Р И М Е Р
⚙️ Все мы знаем традиционную Русскую матрешку. Внутри самой большой находятся уменьшенные копии. Каждая матрешка открывается и обнаруживает внутри себя ещё одну, но меньшего размера. Этот процесс продолжается до тех пор, пока не останется самая маленькая матрёшка, которую уже открыть нельзя — это и есть базовый случай.
🟰Базовый случай — самая маленькая кукла, которую нельзя открыть.
🟰Рекурсивный случай — каждая кукла содержит в себе другую куклу.
🟰Базовый случай (условие выхода) — это условие, при котором функция завершает вызовы и возвращает результат, не вызывая себя снова. (Наша маленькая матрешка)
🟰Рекурсивный случай — это часть функции, где функция вызывает саму себя с другими параметрами, приближаясь к базовому случаю. (Каждая матрешка, кроме самой маленькой)
Telegram
CodeLab
⚙️ Навигация по алгоритмам: (книга Адитьи Бхаргавы 'Грокаем Алгоритмы'): big(O), Tsp, а также разбор интересных тем, например, почему 0.1 + 0.1 != 0.2...Ниже также будут посты с подтемами.
🧑💻(Большой материал):
🔗Связанные списки и массивы (отдельный…
🧑💻(Большой материал):
🔗Связанные списки и массивы (отдельный…
12❤3🥰2👍1🤡1🤓1
This media is not supported in your browser
VIEW IN TELEGRAM
🧑💻 Возьмем простой пример — факториал числа:
5!=5×4×3×2×1=120 — факториал 5
🔗 Теперь выразим этот факториал в виде формулы — n!=n×(n−1)!
Теперь вспоминаем прошлый пост, где я говорил, что Базовый случай — это условие, при котором функция завершает вызовы и возвращает результат (снова она вызывать себя не будет)
⁉️ Что будет являться базовым случаем, если мы захотим реализовать функцию факториала с рекурсией?
💭 Ответ — 0 или 1 (Рекурсия разбивает задачи на подзадачи, но всегда есть предел, условие, после которого функция перестает работать)
🧑💻Теперь попробуем наши мысли скомпоновать:
0️⃣ Вызывается factorial(5) и так как
n != 0 и n != 1, функция возвращает 5 * factorial(4)
1️⃣ Вызывается factorial(4), функция возвращает 4 * factorial(3)
Далее происходят вызовы factorial(3) и factorial(2).
5!=5×4×3×2×1=120 — факториал 5
🔗 Теперь выразим этот факториал в виде формулы — n!=n×(n−1)!
Теперь вспоминаем прошлый пост, где я говорил, что Базовый случай — это условие, при котором функция завершает вызовы и возвращает результат (снова она вызывать себя не будет)
⁉️ Что будет являться базовым случаем, если мы захотим реализовать функцию факториала с рекурсией?
💭 Ответ — 0 или 1 (Рекурсия разбивает задачи на подзадачи, но всегда есть предел, условие, после которого функция перестает работать)
🧑💻Теперь попробуем наши мысли скомпоновать:
def factorial(n):
# Базовый случай
if n == 0 or n == 1:
return 1
# Рекурсивный случай
else:
return n * factorial(n - 1)
print(factorial(5)) # Вывод: 120
0️⃣ Вызывается factorial(5) и так как
n != 0 и n != 1, функция возвращает 5 * factorial(4)
1️⃣ Вызывается factorial(4), функция возвращает 4 * factorial(3)
Далее происходят вызовы factorial(3) и factorial(2).
8❤🔥3❤1🥰1🤓1
П Р О Д О Л Ж Е Н И Е
🧑💻2️⃣ На моменте, когда происходит вызов factorial(1), срабатывает базовый случай, и функция возвращает 1 (Это был пятый вызов)
🔗‼️3️⃣ После всего это начинается возврат значений, обратный процесс (так как рекурсивные вызовы завершатся и достигнут базового случая)
🟰4️⃣ Идем от обратного,четвертый вызов (Это был factorial(2)) → получает результат 1 от factorial(1) и возвращает 2×1=2 (Короче, четвертый вызов получает результат от 5 и возвращает результат) — происходит это все согласно строчке:
5️⃣⚙️ Третий вызов: factorial(3) получает результат 2 от factorial(2) и возвращает 3×2=6.
6️⃣🟰 Второй вызов: factorial(4), случай опять же не базовый, поэтому вызываем 4 * factorial(3), получаем 24
P.S (Надеюсь вы понимаете, что происходит)
7️⃣🟰 Первый вызов: factorial(5), получает 24 от второго вызова и умножает на 5, возвращая 120, это и будет наш ответ
P.S (Надеюсь вы понимаете, что происходит)
🧑💻2️⃣ На моменте, когда происходит вызов factorial(1), срабатывает базовый случай, и функция возвращает 1 (Это был пятый вызов)
🔗‼️3️⃣ После всего это начинается возврат значений, обратный процесс (так как рекурсивные вызовы завершатся и достигнут базового случая)
🟰4️⃣ Идем от обратного,четвертый вызов (Это был factorial(2)) → получает результат 1 от factorial(1) и возвращает 2×1=2 (Короче, четвертый вызов получает результат от 5 и возвращает результат) — происходит это все согласно строчке:
return n * factorial(n - 1)
5️⃣⚙️ Третий вызов: factorial(3) получает результат 2 от factorial(2) и возвращает 3×2=6.
6️⃣🟰 Второй вызов: factorial(4), случай опять же не базовый, поэтому вызываем 4 * factorial(3), получаем 24
P.S (Надеюсь вы понимаете, что происходит)
7️⃣🟰 Первый вызов: factorial(5), получает 24 от второго вызова и умножает на 5, возвращая 120, это и будет наш ответ
P.S (Надеюсь вы понимаете, что происходит)
Строка return n * factorial(n - 1) запускает рекурсивный вызов и ждёт его результат. Как только factorial(n - 1) возвращает значение, это значение умножается на n, и результат поднимается обратно, возвращаясь вызову на уровень выше.
7❤🔥4👍2❤1🤓1
#1
numbers = [1, 2, 3]
result = ", ".join(str(num) for num in numbers)
print(result)
7❤🔥4❤2👍1🤓1
👍4❤🔥2❤1🤓1
#2
def sum_values(a, b, c):
return a + b + c
def wrapper(*args):
return sum_values(*args)
print(wrapper(5, 10, 15))
5👍4❤1❤🔥1
❤4❤🔥2👍1
#3
def calculate_sum(*args, **kwargs):
total = sum(args)
for key, value in kwargs.items():
total += value
return total
print(calculate_sum(1, 2, 3, num1=4, num2=5))
3🤯5❤1❤🔥1🤓1
#1
text = "Learn Python step by step"
result = text.split(" ", 3)
print(result)
8❤🔥3❤1🥰1
#2
def Code_lab_func(a, b, *args, **kwargs):
result = a + b
for arg in args:
result += arg
for key in kwargs:
result += kwargs[key]
return result
print(Code_lab_func(1, 2, 3, 4, extra1=5, extra2=6.5))
4❤🔥4❤1🥰1
❤🔥3❤1🤯1👀1
🧑💻 Гайс, завтра разберем какой нибудь код или разберем прошлые вопросы (в любом случае, завтра будет нормальный пост)
#1
#1
x = 5
def test():
global x
x += 1
return x
print(test())
6❤🔥4🥰1
#2
def func(a, b=5, *args, d=8, **kwargs):
return a + b + d
print(func(1, 2, 3, d=4, e=5))
3👨💻3🤡1
🔗 Всем доброе утро! Сорянчик, что не выпускал посты, неделя выдалась тяжелой, поэтому дал время себе отдохнуть 🥱
Разбираем вот такой несложный код:
0️⃣ Как обычно объявляем функцию:
1️⃣ Объявляем вторую функцию 🟰
🔗 Во второй строчке мы как раз вызываем первую функцию
2️⃣ Дальше просто вызываем вторую функцию
_______________________________
3️⃣ Кароч, вызвали мы wrapper(5, 10, 15) → (5, 10, 15) — эти самые аргументы передаются в wrapper и собираются в кортеж args = (5, 10, 15) → Внутри wrapper, когда мы вызываем
Разбираем вот такой несложный код:
def sum_values(a, b, c):
return a + b + c
def wrapper(*args):
return sum_values(*args)
print(wrapper(5, 10, 15))
0️⃣ Как обычно объявляем функцию:
def sum_values(a, b, c):
return a + b + c
1️⃣ Объявляем вторую функцию 🟰
wrapper()🟰. В виде аргумента будет 🟰*args🟰 (Позиционные аргументы, для тех, кто забыл → Сама функция *args передает произвольное количество аргументов в виде кортежа)def wrapper(*args):
return sum_values(*args)
🔗 Во второй строчке мы как раз вызываем первую функцию
🟰sum_values()🟰 и с помощью *args переданные аргументы "передаются" в 🟰sum_values🟰 2️⃣ Дальше просто вызываем вторую функцию
print(wrapper(5, 10, 15))_______________________________
3️⃣ Кароч, вызвали мы wrapper(5, 10, 15) → (5, 10, 15) — эти самые аргументы передаются в wrapper и собираются в кортеж args = (5, 10, 15) → Внутри wrapper, когда мы вызываем
🟰sum_values(*args)🟰, кортеж (5, 10, 15) распаковывается, и sum_values получает три отдельных аргумента: a=5, b=10, и c=15 → по итогам, sum_values вычисляет сумму: 5 + 10 + 15 = 3015👍4❤🔥1🥰1🤯1
🤡8🤓2❤🔥1👎1