Аргумент по умолчанию и аргумент переменной длины в python

В функции я определил два аргумента: переменная 1:default, например, age=12, и аргумент 2:variable-length, например, *friends.

    def variable(age=12,*friends):
         print 'Age:', age
         print 'Name:', friends
         return
    variable(15,'amit','rishabh') # RESULT is "Age: 15 & Name: 'amit', 'rishabh'
    variable('rahul','sourabh') # Now here result is Age: rahul & Name: 'sourabh' 

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

Мне нужен результат в таком формате:

variable(15,'name','surname') as Age:15 and Name: 'name','surname'

и если я не назначу возраст как

variable('new','name') Result needed to be as. Age:12 & Name:'new','name'

«почему он определяет первый аргумент как возраст». потому что так вы определили свою функцию.

Julien 10.09.2018 09:03

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

Julien 10.09.2018 09:04

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

Shintlor 10.09.2018 09:05

попробуй передать список друзьям.

ᴀʀᴍᴀɴ 10.09.2018 09:12
0
4
132
2

Ответы 2

Попробуйте переключить аргументы:

def variable(*friends,age=12):
    print ('Age:', age)
    print ('Name:', friends)
    return

Это должно сработать.

Это не сработает, как если бы вы указали *args, **kwargs должен следовать, явные аргументы должны быть перед, (name, age=12, *args, **kwargs) это правильный синтаксис

Alexandru Martalogu 10.09.2018 09:23

Вы правы, что это может не соответствовать правильному синтаксису. Тем не менее это работает. OP должен принять ваш ответ!

Shintlor 10.09.2018 09:34

Вы уверены? Я пробую на Python 2.7, и моя IDE сообщает мне Encountered "age" at line 268, column 23. Was expecting one of: "*" ... "**" ...

Alexandru Martalogu 10.09.2018 10:04

Также запуск кода дает мне исключение синтаксиса, может работать на Python 3?

Alexandru Martalogu 10.09.2018 10:06

Да, я запускаю python 3.6.6 и тестировал его на ноутбуке jupyter.

Shintlor 10.09.2018 10:17

Вы можете попробовать указать список вместо различных аргументов, также аргументы ключевых слов всегда должны идти после аргументов:

def variable(friends, age=12):
    print 'Age:', age
    print 'Name:', ",".join(friends)
    return
variable(['amit','rishabh'], 15) # RESULT is "Age: 15 & Name: 'amit', 'rishabh'
variable(['rahul','sourabh']) # Now here result is Age: rahul & Name: 'sourabh'

Другие вопросы по теме