Lub: words = dict (keyword1 = 'foo', keyword2 = 'bar')
Ned Deily,
1
**Operatora rozpakowaniu może być używany do przekazywania kwargs z jednej funkcji kwargs innej funkcji. Rozważmy następujący kod: (w komentarzach wydaje się, że znaki nowej linii nie są dozwolone) def a(**kw): print(kw)i def b(**kw): a(kw). Ten kod wygeneruje błąd, ponieważ kwargs jest w rzeczywistości słownikiem i zostanie zinterpretowany jako zwykły argument tego dicttypu. Dlatego zmiana def b(**kw): a(kw)na def b(**kw): a(**kw)rozpakuje kwi usunie błędy.
Benj
10
Jak zauważyli inni, możesz robić, co chcesz, przekazując dyktando. Istnieje wiele sposobów tworzenia dyktafonu. Jednym z zachowań keyword=valuestylu, który próbowałeś, jest użycie wbudowanego dyktu :
ach, nie zwracałem uwagi. Teraz powinno być lepiej.
David Z,
3
Więc kiedy tu przyszedłem, szukałem sposobu na przekazanie kilku ** kwargów w jednej funkcji - do późniejszego wykorzystania w dalszych funkcjach. Ponieważ nie jest to zaskakujące, nie działa:
deffunc1(**f2_x, **f3_x):
...
Dzięki własnemu „eksperymentalnemu” kodowaniu doszedłem do oczywistego sposobu, w jaki to zrobić:
Odpowiedzi:
Tak. Robisz to tak:
def method(**kwargs): print kwargs keywords = {'keyword1': 'foo', 'keyword2': 'bar'} method(keyword1='foo', keyword2='bar') method(**keywords)
Uruchomienie tego w Pythonie potwierdza, że dają one identyczne wyniki:
{'keyword2': 'bar', 'keyword1': 'foo'} {'keyword2': 'bar', 'keyword1': 'foo'}
źródło
**
Operatora rozpakowaniu może być używany do przekazywania kwargs z jednej funkcji kwargs innej funkcji. Rozważmy następujący kod: (w komentarzach wydaje się, że znaki nowej linii nie są dozwolone)def a(**kw): print(kw)
idef b(**kw): a(kw)
. Ten kod wygeneruje błąd, ponieważ kwargs jest w rzeczywistości słownikiem i zostanie zinterpretowany jako zwykły argument tegodict
typu. Dlatego zmianadef b(**kw): a(kw)
nadef b(**kw): a(**kw)
rozpakujekw
i usunie błędy.Jak zauważyli inni, możesz robić, co chcesz, przekazując dyktando. Istnieje wiele sposobów tworzenia dyktafonu. Jednym z zachowań
keyword=value
stylu, który próbowałeś, jest użycie wbudowanego dyktu :keywords = dict(keyword1 = 'foo', keyword2 = 'bar')
Zwróć uwagę na wszechstronność
dict
; wszystkie dają ten sam wynik:>>> kw1 = dict(keyword1 = 'foo', keyword2 = 'bar') >>> kw2 = dict({'keyword1':'foo', 'keyword2':'bar'}) >>> kw3 = dict([['keyword1', 'foo'], ['keyword2', 'bar']]) >>> kw4 = dict(zip(('keyword1', 'keyword2'), ('foo', 'bar'))) >>> assert kw1 == kw2 == kw3 == kw4 >>>
źródło
Masz na myśli dyktando? Oczywiście że możesz:
def method(**kwargs): #do something keywords = {keyword1: 'foo', keyword2: 'bar'} method(**keywords)
źródło
Więc kiedy tu przyszedłem, szukałem sposobu na przekazanie kilku ** kwargów w jednej funkcji - do późniejszego wykorzystania w dalszych funkcjach. Ponieważ nie jest to zaskakujące, nie działa:
def func1(**f2_x, **f3_x): ...
Dzięki własnemu „eksperymentalnemu” kodowaniu doszedłem do oczywistego sposobu, w jaki to zrobić:
def func3(f3_a, f3_b): print "--func3--" print f3_a print f3_b def func2(f2_a, f2_b): print "--func2--" print f2_a print f2_b def func1(f1_a, f1_b, f2_x={},f3_x={}): print "--func1--" print f1_a print f1_b func2(**f2_x) func3(**f3_x) func1('aaaa', 'bbbb', {'f2_a':1, 'f2_b':2}, {'f3_a':37, 'f3_b':69})
Wydrukuje się zgodnie z oczekiwaniami:
--func1-- aaaa bbbb --func2-- 1 2 --func3-- 37 69
źródło
python 3.5
ileFoo(**arg1, **arg2)
jest to możliwe