Какова цель и использование ** kwargs?

$target='uploads/'.basename($_FILES['UploadFileName']['name']);

if(move_uploaded_file($_FILES['UploadFileName']['tmp_name'],$target)) {

     //Insert into your db

     $fp = fopen($target, "r");
}
729
задан martineau 9 February 2019 в 23:20
поделиться

4 ответа

Вы можете использовать ** kwargs , чтобы позволить вашим функциям принимать произвольное количество аргументов ключевого слова («kwargs» означает «аргументы ключевого слова»):

>>> def print_keyword_args(**kwargs):
...     # kwargs is a dict of the keyword args passed to the function
...     for key, value in kwargs.iteritems():
...         print "%s = %s" % (key, value)
... 
>>> print_keyword_args(first_name="John", last_name="Doe")
first_name = John
last_name = Doe

Вы также можете используйте синтаксис ** kwargs при вызове функций путем создания словаря аргументов ключевого слова и передачи его вашей функции:

>>> kwargs = {'first_name': 'Bobby', 'last_name': 'Smith'}
>>> print_keyword_args(**kwargs)
first_name = Bobby
last_name = Smith

Учебник Python содержит хорошее объяснение того, как это работает, вместе с некоторыми хорошими примерами.

<--Update-->

Для людей, использующих Python 3, вместо iteritems () используйте items ()

844
ответ дан 22 November 2019 в 21:28
поделиться

kwargs - это просто словарь, который добавлены к параметрам.

Словарь может содержать пары ключ-значение. А это кварги. Хорошо, вот как.

Зачем не все так просто.

Например (очень гипотетически) у вас есть интерфейс, который просто вызывает другие подпрограммы для выполнения работы:

def myDo(what, where, why):
   if what == 'swim':
      doSwim(where, why)
   elif what == 'walk':
      doWalk(where, why)
   ...

Теперь у вас есть новый метод " drive ":

elif what == 'drive':
   doDrive(where, why, vehicle)

Но постойте, появился новый параметр" транспортное средство "- вы не знали его раньше. Теперь вы должны добавить его в подпись myDo-функции.

64
ответ дан 22 November 2019 в 21:28
поделиться

Распаковка словарей

** распаковка словарей.

Это

func(a=1, b=2, c=3)

то же самое, что

args = {'a': 1, 'b': 2, 'c':3}
func(**args)

Это полезно, если вам нужно построить параметры:

args = {'name': person.name}
if hasattr(person, "address"):
    args["address"] = person.address
func(**args)  # either expanded to func(name=person.name) or
              #                    func(name=person.name, address=person.address)

Упаковка параметры функции

def setstyle(**styles):
    for key, value in styles.iteritems():      # styles is a regular dictionary
        setattr(someobject, key, value)

Это позволяет использовать функцию следующим образом:

setstyle(color="red", bold=False)
320
ответ дан 22 November 2019 в 21:28
поделиться

kwargs - это синтаксический сахар для передачи аргументов имени в качестве словарей (для func) или словарей в качестве именованных аргументов (для func)

5
ответ дан 22 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

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