🧑💻 #1 Выполним несколько тестов
def func(a, *args, **kwargs):
print(a, args, kwargs)
func(1, 2, 3, x=4, y=5)
1❤🔥2👍1🤓1
Да, знаю, что мы это не проходили, завтра разберемся) Хотя, если среди вас есть те, кто шарит, смело объясняйте в коментах
Anonymous Quiz
33%
1 (2, 3) {'x': 4, 'y': 5}
40%
1 [2, 3] {'x': 4, 'y': 5}
27%
1 (2, 3, {'x': 4, 'y': 5})
0%
2 (1, 3, {'x': 4, 'y': 5})
❤🔥2❤1👍1🥰1
#2 🌶
def func(x, y=[]):
y.append(x)
return y
list1 = func(1)
list2 = func(2, [])
list3 = func(3)
print(list1, list2, list3)
1❤🔥2❤1👍1👀1
Какой будет ответ? (Завтра также разберем)
Anonymous Quiz
43%
[1] [2] [3]
29%
[1, 3] [2] [1, 3]
21%
[1] [2] [1, 3]
7%
[1, 2, 3] [1, 2, 3] [1, 2, 3]
❤🔥2❤1👍1🥰1
🧑💻 Всем добрый вечер гайс
🔗 Как и говорил, рассмотрим метод join(). Этот метод используется в Python для объединения списка строк в одну строку с использованием указанного разделителя.
🔗 Использование другого разделителя (запятая и пробел):
🔗 Также есть случаи, когда элементы последовательности не являются строками, в таком случае приводим их к нужному типу данных.
🔗 Как и говорил, рассмотрим метод join(). Этот метод используется в Python для объединения списка строк в одну строку с использованием указанного разделителя.
words = ["Hello", "Code", "Lab", "is", "awesome"]
result = " ".join(words)
print(result) # Вывод: "Hello Code Lab is awesome"
🔗 Использование другого разделителя (запятая и пробел):
fruits = ["Hello", "Code", "Lab", "is", "awesome"]
result = ", ".join(fruits)
print(result) # Вывод: "Hello, Code, Lab, is, awesome"
🔗 Также есть случаи, когда элементы последовательности не являются строками, в таком случае приводим их к нужному типу данных.
numbers = [1, 2, 3]
result = "-".join(map(str, numbers))
print(result) # Вывод: "1-2-3"
1❤🔥2🤯1🤡1🤓1
🧑💻Всем ку, сейчас разберем вот такую функцию ↓
🔗 Как раз постараемся понять что такое этот ваш **кваргс и *аргс
0️⃣ Ну для начала базировано объявляем функцию:
⚙️ Из аргументов у нас есть a (обычный аргумент, мы их обычно и передаем в других примерах), *args (Позиционные аргументы) и **kwargs (Именованные аргументы) — сейчас со всем разберемся
Для начала, разберемся с таким оператором как 🟰
⁉️ Че он делает? Он буквально распаковывает элементы из коллекций (у нас это списки, кортежи или множества)
💬 — Мысль не моя, но автор статьи пояснил очень неплохо, вот вам пример:
📊 Вот еще пример, но уже с нашей любимой функцией:
‼️ Если вы подумали, что на одной звездочке все закончится, как бы не так)
🔗 Ведь существует оператор 🟰
🔗 Как раз постараемся понять что такое этот ваш **кваргс и *аргс
def func(a, *args, **kwargs):
print(a, args, kwargs)
func(1, 2, 3, x=4, y=5)
0️⃣ Ну для начала базировано объявляем функцию:
⚙️ Из аргументов у нас есть a (обычный аргумент, мы их обычно и передаем в других примерах), *args (Позиционные аргументы) и **kwargs (Именованные аргументы) — сейчас со всем разберемся
def func(a, *args, **kwargs):
Для начала, разберемся с таким оператором как 🟰
* 🟰⁉️ Че он делает? Он буквально распаковывает элементы из коллекций (у нас это списки, кортежи или множества)
"Я могу описать его как оператор расширения, распаковывающий наборы домино, чтобы потом выстроить из них одну единую огромную последовательность."
💬 — Мысль не моя, но автор статьи пояснил очень неплохо, вот вам пример:
a = [1,2,3]
b = [*a,4,5,6] # мы берем содержимое списка a и распаковываем его в новый список b
print(b) # [1,2,3,4,5,6]
📊 Вот еще пример, но уже с нашей любимой функцией:
def func(x, y, z):
return x + y + z
numbers = [1, 2, 3]
result = func(*numbers) # Распаковываем список в отдельные аргументы
print(result) # Вывод: 6
‼️ Если вы подумали, что на одной звездочке все закончится, как бы не так)
🔗 Ведь существует оператор 🟰
** 🟰. Нужен он для распаковки словарей, превращая пары ключ-значение в отдельные именованные аргументы: data = {'name': 'Brovscki', 'age': 21}
def greeting(name, age):
print(f"Hello, {name}! You are {age} years old.")
greeting(**data) # Вывод: Hello, Brovscki! You are 21 years old7❤🔥3👍2❤1🤓1👀1
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