Вопрос от студента: как использовать в map функцию с параметром?
Все, кто сталкивался с
Или преобразовать все строки в верхнему регистру
А что делать в случае, если
и требуется округлить все числа до 1 знака после запятой, то есть, получить
В какое место надо написать параметр при использовании
Отвечаем. Просто так это сделать не получится! Для этого понадобятся lambda-функции.
В этом случае, чтобы округлить числа из списка до 1 знака после запятой, можно использовать следующий приём:
Здесь
Результатом будет новый список, содержащий округленные значения:
Таким образом, используя
Все, кто сталкивался с
map(), знают, как использовать её, если параметры не нужны. Например, с map() можно привести числа в списке к абсолютным значениям numbers = [-1, 2, -3, 4, -5]
absolute_values = list(map(abs, numbers))
print(absolute_values)
# [1, 2, 3, 4, 5]Или преобразовать все строки в верхнему регистру
names = ["alice", "bob", "charlie", "david"]
print(list(map(str.upper, names)))
# ["ALICE", "BOB", "CHARLIE", "DAVID"]А что делать в случае, если
map нуждается в параметре? Например, есть список numbers = [0, 0.333, 0.667, 1]
и требуется округлить все числа до 1 знака после запятой, то есть, получить
[0, 0.3, 0.7, 1]В какое место надо написать параметр при использовании
map()?Отвечаем. Просто так это сделать не получится! Для этого понадобятся lambda-функции.
В этом случае, чтобы округлить числа из списка до 1 знака после запятой, можно использовать следующий приём:
a = [0, 0.333, 0.667, 1]
result = list(map(lambda x: round(x, 1), a))
Здесь
lambda x: round(x, 1) создает анонимную функцию, которая принимает аргумент x и вызывает функцию round() с параметром 1 для округления числа x до 1 знака после запятой. Затем map() применяет эту анонимную функцию ко всем элементам списка.Результатом будет новый список, содержащий округленные значения:
[0, 0.3, 0.7, 1]
Таким образом, используя
map() с анонимными функциями, можно применить функцию с параметром к элементам списка и получить нужный результат.👍49🥱6❤3🔥3
Генератор кортежей
Генераторы списков — это конструкции вида
#
Чаще всего их используют для создания списков на лету. Но можно создавать и словари, если использовать фигурные скобки и пары значений, разделенных двоеточием:
Кортеж так создать не получится, потому что круглые скобки зарезервированы под генераторные выражения.
Но если все же хочется создать кортеж на лету именно этим способом, то можно вот так:
То есть, распаковываем и ставим запятую, чтобы обозначить, что это кортеж. Такие дела!
Генераторы списков — это конструкции вида
[x for x in range(5)]#
[0, 1, 2, 3, 4]Чаще всего их используют для создания списков на лету. Но можно создавать и словари, если использовать фигурные скобки и пары значений, разделенных двоеточием:
{n: n**2 for n in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}Кортеж так создать не получится, потому что круглые скобки зарезервированы под генераторные выражения.
Но если все же хочется создать кортеж на лету именно этим способом, то можно вот так:
*(x for x in range(5)),
# (0, 1, 2, 3, 4)То есть, распаковываем и ставим запятую, чтобы обозначить, что это кортеж. Такие дела!
👍56🤯14🤩4🥱3🤔2
Вау, в Python будет можно по желанию отключить GIL. В мейн буквально пару часов назад вмержили эту настройку
https://github.com/python/cpython/pull/116338
GIL (Global Interpreter Lock) — это механизм в CPython, который предотвращает одновременное выполнение нескольких потоков.
Это всю дорогу означало, что даже если мы пишем программу на Python как многопоточную, то в любой момент времени может выполняться только один тред.
С одной стороны, это ограничивало возможности параллельного выполнения кода даже на многоядерных процессорах. С другой, облегчало управление памятью в Python: такое решение исключает все особенности многопоточного программирования и делает проще работу программиста.
Наличие GIL годами было предметом дебатов и критики из-за ограничений на многопоточность. Я рада, что парадигма однопоточности Python наконец сдвигается: это реально изменит разработку на этом языке.
https://github.com/python/cpython/pull/116338
GIL (Global Interpreter Lock) — это механизм в CPython, который предотвращает одновременное выполнение нескольких потоков.
Это всю дорогу означало, что даже если мы пишем программу на Python как многопоточную, то в любой момент времени может выполняться только один тред.
С одной стороны, это ограничивало возможности параллельного выполнения кода даже на многоядерных процессорах. С другой, облегчало управление памятью в Python: такое решение исключает все особенности многопоточного программирования и делает проще работу программиста.
Наличие GIL годами было предметом дебатов и критики из-за ограничений на многопоточность. Я рада, что парадигма однопоточности Python наконец сдвигается: это реально изменит разработку на этом языке.
GitHub
gh-116167: Allow disabling the GIL with `PYTHON_GIL=0` or `-X gil=0` by swtaarrs · Pull Request #116338 · python/cpython
In free-threaded builds, running with PYTHON_GIL=0 or -X gil=0 will now disable the GIL. #116322 and #116329 track follow-up work to re-enable the GIL when loading an incompatible extension, and to...
🔥29👍6❤3🤔2🤯2🐳2
Вы, наверное, знаете, что из-за того, что числа в памяти представлены в двоичной форме, в Python есть ошибка вида
В Python модуль
А вот кто скажет, почему возникает разница в примерах ниже?
1️⃣
2️⃣
Жду ваши ответы в комментариях!
print(0.1 + 0.2)
# 0.30000000000000004В Python модуль
decimal поддерживает точную арифметику десятичных чисел. Она важна в областях, требующих высокой точности, например, в финансах или научных расчетах.А вот кто скажет, почему возникает разница в примерах ниже?
1️⃣
from decimal import Decimal
a = Decimal(0.1)
b = Decimal(0.2)
print(a + b)
# 0.30000000000000001665334536942️⃣
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b)
# 0.3Жду ваши ответы в комментариях!
👍20🤯10❤3😁2
Исторический момент: выходит Python 3.14 и они там отменяют GIL. Дожили, поздравляю нас!🎉
Всем, кто хоть раз в жизни писал код в несколько тредов на питоне и ломал голову, почему не ускоряется😁 Это ваш день!
Глобальная блокировка десятилетиями неявно ограничивала интерпретатор, а мы пользовались multiprocessing-ом, расширениями на плюсах и всякими костылями, чтобы задействовать все ядра процессора.
Это первый стабильный (не экспериментальный) релиз, в котором интерпретатор без GIL поддерживается официально. Теперь:
- появляются тру параллельные треды на чистом питоне,
- Async начинает работать с тредами,
- реализовано нормальное масштабирование на нескольких ядрах для data-intensive задач, машинки и прочих симуляций.
Это не очередной релиз, а прям веха в эволюции языка.
Как человек, который много лет живет питоном, я реально в восторге.
Пока, GIL! Скучать не будем.
———
UPD
⚠️ Ладно, надо уточнить, что так-то
- free-threaded режим не включён по умолчанию: такой питон нужно собирать со специальным флагом
- и большинство важных либ пока с этим режимом несовместимы
Но все равно круто
Всем, кто хоть раз в жизни писал код в несколько тредов на питоне и ломал голову, почему не ускоряется
Глобальная блокировка десятилетиями неявно ограничивала интерпретатор, а мы пользовались multiprocessing-ом, расширениями на плюсах и всякими костылями, чтобы задействовать все ядра процессора.
Это первый стабильный (не экспериментальный) релиз, в котором интерпретатор без GIL поддерживается официально. Теперь:
- появляются тру параллельные треды на чистом питоне,
- Async начинает работать с тредами,
- реализовано нормальное масштабирование на нескольких ядрах для data-intensive задач, машинки и прочих симуляций.
Это не очередной релиз, а прям веха в эволюции языка.
Как человек, который много лет живет питоном, я реально в восторге.
Пока, GIL! Скучать не будем.
———
UPD
⚠️ Ладно, надо уточнить, что так-то
- free-threaded режим не включён по умолчанию: такой питон нужно собирать со специальным флагом
- и большинство важных либ пока с этим режимом несовместимы
Но все равно круто
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔25❤22🔥7🎉6😁2🐳1