Przekazywanie listy do funkcji w celu działania jako wiele argumentów
Myślę, że 'rozpakować' może być błędnym słownictwem tutaj-przepraszam, bo jestem pewien, że jest to podwójne pytanie.
Moje pytanie jest dość proste: w funkcji, która oczekuje listy elementów, jak mogę przekazać element listy Pythona bez uzyskania błędu?
my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!
Na pewno musi być jakiś sposób, aby rozwinąć listę i przekazać funkcję 'red','blue','orange'
na kopytku?
3 answers
function_that_needs_strings(*my_list) # works!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-10 14:24:28
Tak, możesz użyć składni *args
(splat):
function_that_needs_strings(*my_list)
Gdzie my_list
może być dowolna iterowalna; Python będzie pętlą nad danym obiektem i użyje każdego elementu jako osobnego argumentu do funkcji.
Patrz Dokumentacja wyrażenia wywołania.
Istnieje również odpowiednik słowa kluczowego-parametr, używając dwóch gwiazdek:
kwargs = {'foo': 'bar', 'spam': 'ham'}
f(**kwargs)
I istnieje równoważna składnia do określania argumentów catch-all w sygnaturze funkcji:
def func(*args, **kw):
# args now holds positional arguments, kw keyword arguments
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:32
Od wersji Python 3.5 można rozpakować nieograniczoną ilość list
s.
PEP 448-dodatkowe uogólnienia rozpakowywania
Więc to zadziała:
a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-04 19:11:35