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.
Ответы
Ответ 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()
при вызове в функциональных блоках, но не в блоках классов.