2016-02-04 14 views
19

Mam definicję funkcji, jak poniżej i przekazuję argumenty słów kluczowych. Jak uzyskać zwrot słownika o tej samej nazwie, co argumenty słowa kluczowego?Python keyword arguments unpack and return dictionary

Ręcznie mogę zrobić:

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 
    } 

Ale nie chcę tego robić. Czy jest jakiś sposób, abym mógł wykonać tę pracę bez pisania pisma?

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

Dlaczego chcesz to zrobić? –

+0

Początkowo chciałem przekazać ten return dict do metody tworzenia Modelu Django. @PadraicCunningham –

+0

Po prostu użyj 'dyktafonu' –

Odpowiedz

13

Jeśli w ten sposób jest odpowiedni dla Ciebie, użyj kwargs (patrz Understanding kwargs in Python) jak w fragmencie kodu poniżej:

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

W przeciwnym razie, można utwórz kopię parametrów z built-in locals() przy uruchomieniu funkcji i return, która to kopia:

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() będzie działać tylko wtedy, gdy nie ma zmiennej zdefiniowanej w treści metody :) –

+0

@MuhammadTahir Dzięki za poprawienie, zaktualizowałem odpowiedź –

3

Uzyskaj argumenty kluczowych w **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

Jeśli nie chcesz przekazać **kwargs, można po prostu wrócić locals:

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

Zauważ, że chcesz usunąć self z wyniku, jeśli przekazać ją jako argument.

1

Można użyć funkcji locals(). locals() aktualizuje i zwraca słownik reprezentujący bieżącą tablicę symboli lokalnych. Darmowe zmienne są zwracane przez locals(), gdy są wywoływane w blokach funkcyjnych, ale nie w blokach klasy.