Уведомления

Группа в Telegram: @pythonsu

#1 Март 9, 2019 23:37:43

RaZoR0987
Зарегистрирован: 2019-03-09
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Помощь новичку

Недавно начал изучать python, и вот возник такой вопрос.
Есть следующий код:

 def total(initial, *numbers, extra_number):
    count = initial
    for number in numbers:
        count += number
        count += extra_number
    print(count)
total(10, 1, 2, 3, extra_number=50)
Объясните пожалуиста что означают звездочки, что они делают. И вообще весь код что делает? Кто может объяснить?
Заранее Спасибо!!
Ещё этот код есть, тоже не понимаю.
 def total(initial=5, *numbers, **keywords):
    count = initial
    for number in numbers:
        count += number
    for key in keywords:
        count += keywords[key]
    return count
print(total(10, 1, 2, 3, vegetables = 50, fruits = 100))

Отредактировано RaZoR0987 (Март 9, 2019 23:39:23)

Офлайн

#2 Март 10, 2019 01:06:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Помощь новичку

  
>>> def f(a, b, *c, **d):
...     print(a)
...     print(b)
...     print(c)
...     print(d)
... 
>>> f(1, 2, 3, 4, 5, n1=6, n2=7, n3=8)
1
2
(3, 4, 5)
{'n1': 6, 'n2': 7, 'n3': 8}
>>>



Офлайн

#3 Март 11, 2019 07:37:42

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Помощь новичку

Одна звёздочка создаёт из “лишних” позиционных аргументов кортеж, а две звёздочки из именованных аргументов создаёт словарь. Т.е. звёздочки сворачивают (упаковывают) аргументы.
В примере от py.user.next f принимает только два позиционных аргумента a и b, остальные от 3 до 5 аргумент *с упаковывает в кортеж. **d упаковывает все именованные аргументы в словарь, где ключом являются имена аргументов.
Кстати, если звездочки используются при вызове какой-либо функции, то передаваемая последовательность распакуется в отдельные позиционные аргументы, а словарь распакуется в именованные

 def f(a,b,c,d,n1=1, n2=2, n3=3):
    print(a)
    print(b)
    print(c)
    print(d)
    print(n1)
    print(n2)
    print(n3)
x = (3, 4, 5)
y = {'n1': 6, 'n2': 7, 'n3': 8}
f(2, *x, **y)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version