Просьба объяснить причину инверсии в конце результата компиляции и возникновения 'None'
Код заимствован из книги AByteOfPython в книге, по крайней мере в части, где представлен данный пример, смутно объясняется принцип действия этих "звездочек" и вообще мало раскрыта суть кода. прошу опытных товарищей сориентировать.
Код:
def total(a=5, *numbers, **phonebook):
print ('a = ', a)
#пробегаемсяя по всем элементам кортежа
for single_item in numbers:
print('single_item = ', single_item)
#пробегаемся по всем элементам тел. книги.
for first_part, second_part in phonebook.items():
print(first_part, second_part)
print(total(10,1,2,3,Jack=1123,John=2231,Inge=1560))
результат компиляции:
a = 10
single_item = 1
single_item = 2
single_item = 3
Jack 1123
John 2231
Inge 1560
None
Ответы (1 шт):
Эти "звёздочки" - способ передать в функцию некоторое заранее неопределённое количество аргументов.
Если кратко, то сначала в определёнии функции пишется некоторое количество аргументов, которые перечислены явно. В вашем примере это один аргумент "a", но их может быть и больше, и вообще не быть.
Все остальные аргументы, которые не перечислены явно, попадают в аргумент с одной звёздочкой (если это просто значения без имени), либо в аргумент с двумя звёздочками (если они переданы с именем).
То есть если брать ваш пример, то мы видим, что туда передаются аргументы:
10,1,2,3,Jack=1123,John=2231,Inge=1560
Первый аргумент 10 попадает в аргумент "a" - потому что этот аргумент в определении функции прописан явно.
Следующие аргументы 1, 2, 3 переданы без имён, поэтому они попадают все списком в аргумент с одной звёздочкой (numbers)
Дальше идут "ключевые" (то есть именованные) аргументы Jack=1123,John=2231,Inge=1560 поэтому они все в виде словаря попадают в аргумент с двумя звёздочками (phonebook)
Более подробно можно прочитать, например, здесь: https://habr.com/ru/company/ruvds/blog/482464/