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?

Author: Carcigenicate, 2010-08-13

3 answers

function_that_needs_strings(*my_list) # works!

Możesz przeczytać o tym tutaj.

 318
Author: Jochen Ritzel,
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
 39
Author: Martijn Pieters,
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ść lists.

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)
 17
Author: vishes_shell,
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