Может переменное количество аргументов быть переданным функции?

В iOS 9 я использую:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool
{   
    FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String, annotation: options["UIApplicationOpenURLOptionsAnnotationKey"])
    return true
}
326
задан Salvador Dali 18 April 2015 в 10:57
поделиться

2 ответа

Да.

Это просто и работает, если вы игнорируете аргументы ключевого слова:

def manyArgs(*arg):
  print "I was called with", len(arg), "arguments:", arg

>>> manyArgs(1)
I was called with 1 arguments: (1,)
>>> manyArgs(1, 2, 3)
I was called with 3 arguments: (1, 2, 3)

Как видите, Python выдаст вам единственный кортеж со всеми аргументами.

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

424
ответ дан 23 November 2019 в 00:51
поделиться

Добавление для раскрутки сообщения:

Вы также можете отправить несколько аргументов ключ-значение.

def myfunc(**kwargs):
    # kwargs is a dictionary.
    for k,v in kwargs.iteritems():
         print "%s = %s" % (k, v)

myfunc(abc=123, efh=456)
# abc = 123
# efh = 456

И вы можете смешать два:

def myfunc2(*args, **kwargs):
   for a in args:
       print a
   for k,v in kwargs.iteritems():
       print "%s = %s" % (k, v)

myfunc2(1, 2, 3, banan=123)
# 1
# 2
# 3
# banan = 123

Они должны быть объявлены и вызваны в этом порядок, то есть сигнатура функции должна быть * args, ** kwargs и вызываться в этом порядке.

220
ответ дан 23 November 2019 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: