Рубрики
Без рубрики

Что такое Asterisk / Star Operator (*) в Python?

Прочитайте этот урок, чтобы освоить небольшую, но критическую тему в Python: asterisk оператор (* args, ** kwargs). Предпочитаю видео? Смотрите 15-миллиметровое видео вместо этого!

Автор оригинала: Chris.

Многие кодеры Python – даже на промежуточных уровнях квалификации – часто озадачены, когда речь идет о звездочке в Python. Что это значит? Как это работает? Как это значит? Эта статья отвечает на все эти вопросы и многое другое.

После изучения этой статьи у вас будет твердое понимание оператора звездочка * В Python – и стать лучшим кодером в процессе!

* * Чтение времени: 3:30 **

В двух словах оператор Звездочки в Python имеет 6 различных значений:

  • A * B. – умножение,
  • A ** B. Эффективность,
  • [a] * b Создание типов контейнеров,
  • def f (* args) Распаковка 1: Определите произвольное количество позиционных аргументов,
  • def f (** kwargs) Распаковка 2: определить произвольное количество аргументов ключевых слов, а также
  • F (** DIC) Распаковка типа контейнера (E.G. Словарь).

Прежде чем начать учиться, сначала откройте свой пробел в знании. Попробуйте этот интерактивный код Shell:

Упражнение : Угадайте вывод каждого примера звездочка. Запустите код, чтобы проверить, правильно ли вы догадываетесь.

Вы чувствуете себя уверенно, используя оператор Asterisk (Star)? Нет? Я так и думал!

Когда использовать STAR * Оператор в Python?

Есть шесть разных ответов на этот вопрос:

1) Умножьте два значения

print(2 * 3)
# 6

Вот как вы уже использовали звездный оператор тысячи раз в собственном коде.

2) Рассчитать мощность значения

print(2 ** 3)
# 8

Использование звездного оператора для расчета экспонии значения значения немного более необычнее – но все же очень распространено. Просто используйте выражение x ** y рассчитать «х к власти Y» Отказ

3) Создание типов данных контейнера

lst = [999999] * 5
print(lst)
# [999999, 999999, 999999, 999999, 999999]

Создание списков с помощью STAR-оператора – это удобная функция. Продолжайте в виду и попытаться использовать его в следующих проектах (используйте его или потерять его).

4) создать функцию с произвольным количеством позиционных аргументов

def average(*args):
    return sum(args) / len(args)


print(average(999.0, 966.3, 988.2, 1344.5))
# 1074.5

Наконец, мы достигли гораздо более интересного применения случая звездного оператора, который вы должны тщательно понимать.

Как гарантировать, что функция может занять произвольное количество аргументов ? Функция средний В примере показывает, как это сделать с вашим аргументом функций * args Отказ Оператор Звездочки создает последовательность значений из произвольного количества позиционных аргументов. Это действительно это: это создает новую переменную с именем args это видно в функции.

Переменная типа кортежа, как вы можете увидеть здесь:

def average(*args):
    print(type(args))
    return sum(args) / len(args)


print(average(999.0, 966.3, 988.2, 1344.5))
# 1074.5

5) Создайте функцию с произвольным количеством аргументов ключевых слов

Прежде всего, каковы аргументы ключевых слов? Они функционируют аргументы с именем (в отличие от позиционных аргументов).

def likes(**kwargs):
    for key in kwargs:
        print(key + " likes " + kwargs[key])


likes(Alice="Bob", Bob="Ann", Ann="Alice")
# Alice likes Bob
# Bob likes Ann
# Ann likes Alice

В примере мы проходим три аргумента ключевых слов при вызове функции Любит (...) С именами: Алиса, Боб и Энн. Оператор двойного звездочка * * Перед переменной кварги Упакуйте все эти аргументы (и потенциально больше) в словарь с именем кварги Отказ

Попробуйте сами : беги Печать (тип (кварг)) Внутри вашей функции и переводчик скажет вам, что переменная типа обдумывать .

Теперь вы можете удобно получить доступ к ключевым элементам аргументах в вашей функции (используя имя переменной Kwargs ).

Мы называем дело 4) и 5) Распаковывать аргументов. Почему распаковки? Потому что они распаковываются в аргументе. Что такое упакованная форма тогда? Вы можете получить упакованную форму при выходе из оператора звездочки. Например, значения в args или кварги Упакованы в пределах типа данных контейнера (I.E., кортеж в случае 4) и Словарь в случае 5.

6) распаковать словарь

def likes(**kwargs):
    for key in kwargs:
        print(key + " likes " + kwargs[key])


dic = {"Alice" : "Bob",
       "Bob" : "Ann",
       "Ann" : "Alice"}
likes(**dic)
# Alice likes Bob
# Bob likes Ann
# Ann likes Alice

Теперь, когда вы знаете о распаковке, легко увидеть, что здесь происходит. Вы создаете словарь DIC Отказ Словарь содержит аргументы ключевых слов – но они все еще упакованы в словаре. Распаковать их, вы используете двойной оператор Asterisk при вызове функции.

Подумайте об этом таким образом: если вы хотели определить значения в словаре, вы бы написали их без курчавой нотации кронштейна {} Отказ Чтобы удалить кронштейн, вы используете двойной оператор Asterisk ** .

Обучите свои распаковки!

На данный момент вы узнали о операторе Asterisk (Star) в Python. Используйте оператор Asterisk, чтобы распаковать тип данных контейнера, такого как список или словарь.

Давайте тренируемся распаковывать немного. Вот самая основная форма распаковки:

readers = ["Cata", "Brian", "Myu", "Joey"]

print(readers)
# ['Cata', 'Brian', 'Myu', 'Joey']

print(*readers)
# Cata Brian Myu Joey

Как видите, оператор Asterisk в основном удаляет тип данных обертки (I.E., список). Вот как вы можете использовать простой распаковки при вызове функции с позиционными аргументами:

def say_hello(*args):
    for arg in args:
        print("hello " + arg)


readers = ["Cata", "Brian", "Myu", "Joey"]
say_hello(*readers)
"""
hello Cata
hello Brian
hello Myu
hello Joey
"""

Четыре списка значений «распаковать» в функциональном аргументе, передавая его с помощью * Читатели . В рамках аргумента функций они существуют в распакованной форме.

В Функция Определение, вы можете увидеть другое приложение оператора Asterisk: произвольные аргументы Отказ

Логично – если вы поместите оператор Asterisk перед именем аргумента ( * args ) При определении функции – вы говорите, что аргументы уже распакованы. Другими словами, выражение * args Содержит значения в распакованной форме. Таким образом, выражение args (без звездочки) относится к упакованной форме этих значений. Вот почему вы можете использовать args в вашей функции, как обычный список.

Как это похоже на словари?

elos = {"Alice" : 1988,
        "Bob" : 2253,
        "Frank" : 1574}

print(elos)
# {'Alice': 1988, 'Bob': 2253, 'Frank': 1574}

print(*elos)
# Alice Bob Frank

Если вы распаковываете словарь с одним оператором Asterisk, результатом является распакованная форма клавиш словаря.

Теперь, как мы распаковываем пары словаря (ключ, значение) (и не только клавиши)? Используя оператор двойного звездочка!

def print_masters(**kwargs):
    for key in kwargs:
        if kwargs[key] > 2000:
            print(str(key) + " " + str(kwargs[key]))


elos = {"Alice" : 1988,
        "Bob" : 2253,
        "Frank" : 1574}

print_masters(**elos)
# Bob 2253

Теперь, вот хороший способ использовать эту функцию, чтобы объединить два словаря, распаковывая оба в новый словарь …

elos_1 = {"Alice" : 1988,
        "Bob" : 2253}

elos_2 = {"Pete" : 1324,
        "Frank" : 1574}

elos = {**elos_1, **elos_2}
print(elos)
# {'Alice': 1988, 'Bob': 2253, 'Pete': 1324, 'Frank': 1574}

Какая красивая функция Python! 😀

Часто задаваемые вопросы

Какие аргументы ключевых слов в Python?

Все функции аргументов имеют имена). При вызове функции у вас есть два варианта: используйте позиционные аргументы или аргументы ключевых слов. В отличие от позиционных аргументов, аргументы ключевых слов делают названия явными при вызове функции. Используя ключевые аргументы, вам не нужно заботиться о порядке аргументов.

Вот пример:

def minus(a, b, c): # all arguments are named
    print(a - b - c)


# positional arguments:
minus(3,2,1)
# 0

# keyword arguments:
minus(c=1, b=2, a=3)
# 0 (keyword overwrites order / position)

Почему в Python используется ** Kwargs?

Выражение ** kwargs Используется при определении функции, чтобы указать, что вы можете вызвать эту функцию с произвольным количеством аргументов ключевых слов. Вот пример:

def likes(**kwargs):
    for key in kwargs:
        print(str(key) + " likes " + str(kwargs[key]))


likes(Alice="Bob")
" Alice likes Bob"


likes(Alice="Bob", Bob="Alice")
"""
Alice likes Bob
Bob likes Alice
"""


likes(Alice="Bob", Bob="Alice", spam=42)
"""
Alice likes Bob
Bob likes Alice
spam likes 42
"""

Как видите, мы можем вызвать функцию с произвольным количеством аргументов ключевых слов.

В чем смысл Asterisk оператора для регулярных выражений Python?

Каждый компьютерный ученый знает вентилификатор звездочка Регулярные выражения Отказ Но многие не техники это тоже знают. Каждый раз, когда вы ищете текстовый файл *.текст На вашем компьютере вы используете оператор Asterisk.

При применении к регулярному выражению А , Питон A * Контификатор соответствует нулю или более вхождению A . * Quantifier называется Звездочный оператор И это всегда относится только к предыдущему регулярному выражению. Например, регулярное выражение «Да *» соответствует строкам ‘ye’ , «Да» и «YESSSSSSS» Отказ Но это не соответствует пустой строке, потому что asterisk Quantifier * не распространяется на все Regex «Да» Но только к предшествующему регелесу ‘s’ .

Давайте изучим два основных примера, чтобы помочь вам получить более глубокое понимание. Вы все их получаете?

>>> import re
>>> text = 'finxter for fast and fun python learning'
>>> re.findall('f.* ', text)
['finxter for fast and fun python ']
>>> re.findall('f.*? ', text)
['finxter ', 'for ', 'fast ', 'fun ']
>>> re.findall('f[a-z]*', text)
['finxter', 'for', 'fast', 'fun']
>>> 

Если вы боретесь с пониманием оператора Asterisk Python Regex в этих примерах, прочитайте следующий учебник:

Соответствующее руководство : Python Re * – Quantifier Asterisk для регулярных выражений

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/what-is-asterisk-in-python/”