5 применений звёздочки в Python
- Просмотры: 9075
- Категория: Python
- Создано: 15 февраля 2021
- Тэги:
Звездочка (*), известная как оператор умножения, - широко используемый символ во всех программах. В большинстве случаев нам достаточно использовать его просто как оператор умножения. Однако, если вы серьезно собираетесь стать экспертом по Python-у, то для вас пришло время узнать, насколько полезна и мощна звездочка в Python-е.
Этот статья покажет 5 примеров использования звездочек с достаточно понятными примерами, от самых элементарных до продвинутых.
Применение 1: Оператор умножения или возведения в степень
Самое простое применение - использовать звездочку в качестве инфиксного оператора:
- Одна звёздочка * - для операции умножения.
- Двойная ** - для операции возведения в степень.
>>> 2*3
>>> 6
>>> 2**3
>>> 8
Применение 2: Получение неограниченного количества аргументов
Функция не обязательно должна получать фиксированное количество аргументов. Если вам нужна большая гибкость или вы не уверены, сколько аргументов будет передано в функцию, вы можете передать в неё неограниченное количество аргументов. Время шоу звездочек.
Как показано в приведенном выше примере, при определении функции мы можем определить параметр с префиксом в виде одной или двух звездочек для захвата неограниченного числа аргументов.
- Параметр с одним префиксом * может захватывать любое количество позиционных аргументов в кортеж.
- Параметр с двойным префиксом ** может захватывать любое количество ключевых аргументов в словарь.
Условно мы определяем функцию следующим образом, если число ее аргументов может быть не определено:
def func(*args, **kwargs):
pass
Применение 3: Использование ключевых аргументов функции
Действительно замечательная возможность использования звездочек - это указать функции принимать только ключевые аргументы.
Пример говорит больше тысячи слов:
Как показано в приведенном выше примере, единственная звёздочка * ограничивает все следующие аргументы; они должны быть переданы в качестве ключевых аргументов.
Иногда нам необходимо использовать несколько ключевых аргументов, а также оставить несколько позиционных аргументов. Тогда мы просто ставим позиционные аргументы перед звездочкой.
Применение 4: Итеративная распаковка
Мы можем использовать звездочки для распаковки итераций, что сделает наши программы понятными и элегантными.
Например, если мы собираемся скомбинировать различные итерируемые объекты, например, список, кортеж и множество в новый список, то как лучше это сделать?
Очевидно, что мы можем использовать цикл for для итерации по всем элементам и дальнейшем добавления их в новый список один за другим:
Мы можем таким образом выполнить нашу миссию, но код выглядит очень длинным и не очень “питонистским”.
Более лучшим методом является использование list comprehensions:
Мы уменьшили цикл с трёх строчек, записав его в виде одной строки. Это уже в стиле Python, но это не самый простой способ!
Пришло время посмотреть, как удобны звездочки для решения этой задачи.
Как было сказано выше, мы можем использовать звездочку как префикса для итерируемых объектов для распаковки их элементов.
Кстати, если мы используем одну звёздочку * в качестве префикса словаря, его ключи будут распакованы. Если мы используем двойные звездочки ** в качестве префикса, будут распакованы его значения. Однако мы обязаны использовать ключи, для распаковывания значений. Из-за этого неудобства не принято извлекать элементы словаря звездочками.
Применение 5: Расширенная итеративная распаковка
Этот синтаксис распаковки был введен PEP 3132, чтобы сделать наш код более элегантным.
Этот PEP предлагает изменение синтаксиса итеративной распаковки, позволяя указать «перехватывающее» имя, которое будет присвоено всем элементам списка, не связанных с “обычным” именем.
Простой пример:
Вывод
Звездочка - один из наиболее часто используемых операторов в программах. Помимо использования в качестве оператора умножения, в Python существует несколько элегантных и мощных его применений, которые помогут нашему коду стать более “питонистическим”.
Мой перевод статьи Yang Zhou: 5 Uses of Asterisks in Python