Оператор звездочка в Python
Достаточно универсальным и при этом удобным оператором в Python является оператор *. Давайте рассмотрим его, но для начала вспомним о множественном присваивании в Python.
Код ниже распределяет значения по переменным в соответствии с их порядком.
a, b, c = 1, 2, 3
print(a,b,c)
То же самое будет и со значением в виде списка.
a, b, c = ["hi", 2, False]
print(a,b,c)
Но если мы добавим четвертый параметр в список, то получим ошибку, то же самое и с меньшим количеством параметров.
a, b, c = ["hi", 2, False, True] #слишком много значений для распаковки.
a, b, c = ["hi", 2] #слишком мало значений.
Вот здесь-то нам и пригодится вышеупомянутый оператор *. Просто поставим его перед одной из наших переменных:
a, b, *c = ["hi", 2, False, True, 10, 11]
При этом присваивание произведется по порядку, начиная с первого, а вывод будет следующим:
hi, 2, [True, 10, 11]
В примере выше Python оператор звездочка * - просто упаковал все оставшиеся значения в список, благодаря чему и состоялось присваивание. При другом способе присваивание будет происходить с конца, и оставшиеся значения войдут в список
*a, b, c = ["hi", 2, False, True, 10, 11]
# вывод:
["hi", 2, False, True,], 10, 11
Подобные операции присваивания справедливы для любых объектов последовательностей, в том числе для строк
*a, b, с = "Hello World"
print(a,b,с)
#Также возможно присваивание переменным меньшего количества значений:
*a, b, с = 1, 2
#вывод:
[], 1, 2 # т.е. переменной *a ,был присвоен пустой список.
Минимальное количество значений здесь равно 2, т.е. присваивание одного единственного значения в данном случае вызовет ошибку.
*a, b, с = 1 # недостаточно значений
Еще один пример, но уже с функцией:
def f(a, b, с, d):
print(a, b, с, d)
f(1, 2, 3, 4)
Но если попытаться передать в функцию список:
a = ["hello", True, 70, [4,6,8]]
f(a) # то выйдет ошибка т.к. требуется передать четыре параметра:
# решение следующее
f(*a) # здесь наш оператор распаковывает массив и передает его элементы по порядку в функцию.
Следующий вариант предполагает использование нашего оператора при определении функции, что позволяет передавать в нее произвольное количество неименованных аргументов. Сама же функция будет возвращать эти аргументы в виде кортежа. Следует заметить, что в качестве параметра функции передается слово args.
def f (*args):
print(args)
f(1,4,7)
f() # можно вызвать функции без передачи аргументов
#обход элементов кортежа по значению
def f (*args):
print(i)
# нахождение суммы чисел в кортеже:
def f (*args):
s = 0
for i in args:
s+=i
return s
print(f(1,2,34,67,7))
Т.о. сегодня мы свами узнали, как с помощью всего одного оператора упростить написание кода.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.