Подтвердить что ты не робот

Python аргументы ключевого слова unpack и return dictionary

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

Вручную я могу сделать:

def generate_student_dict(first_name=None, last_name=None , birthday=None, gender =None):
    return {
        'first_name': first_name,
        'last_name': last_name,
        'birthday': birthday,
        'gender': gender
    }

Но я не хочу этого делать. Есть ли способ, которым я могу выполнить эту работу, даже не набирая dict?

 def generate_student_dict(self, first_name=None, last_name=None, birthday=None, gender=None):
     return # Packed value from keyword argument.
4b9b3361

Ответ 1

Если этот способ подходит вам, используйте kwargs (см. Понимание kwargs в Python), как в фрагменте кода ниже:

def generate_student_dict(self, **kwargs):            
     return kwargs

В противном случае вы можете создать копию параметров с built-in locals() при запуске функции и return, который копирует

def generate_student_dict(first_name=None, last_name=None , birthday=None, gender =None):
     # It important to copy locals in first line of code (see @MuhammadTahir comment).
     args_passed = locals().copy()
     # some code
     return args_passed

generate_student_dict()

Ответ 2

Если вы не хотите передавать **kwargs, вы можете просто вернуть locals:

def generate_student_dict(first_name=None, last_name=None, 
                          birthday=None, gender=None):
    return locals()

Обратите внимание, что вы хотите удалить self из результата, если передать его в качестве аргумента.

Ответ 3

Получить аргументы ключевого слова в **kwargs

def generate_student_dict(self, **kwargs):
  # use it like
  # kwargs.get('first_name')
  # kwargs.get('last_name')
  # kwargs.get('birthday')
  # kwargs.get('gender')
  return kwargs

Ответ 4

Вы можете использовать функцию locals(). locals() обновляет и возвращает словарь, представляющий текущую таблицу локальных символов. Свободные переменные возвращаются locals() при вызове в функциональных блоках, но не в блоках классов.