2016-02-04 4 views
19

У меня есть определение функции, как показано ниже, и я передаю аргументы ключевого слова. Как я могу получить словарь с тем же именем, что и аргументы ключевого слова?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. 
+0

Зачем вы хотите это сделать? –

+0

Изначально я хотел передать этот возврат dict в метод создания модели Django. @PadraicCunningham –

+0

Просто используйте 'dict' –

ответ

13

Если способ подходит для вас, используйте kwargs (см Understanding kwargs in 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's important to copy locals in first line of code (see @MuhammadTahir comment). 
    args_passed = locals().copy() 
    # some code 
    return args_passed 

generate_student_dict() 
+1

locals() будет работать только в том случае, если в теле метода нет никакой переменной :) –

+0

@MuhammadTahir Спасибо за исправление, я обновил ответ –

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 
7

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

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

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

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^