Przekazywanie tablicy / listy do Pythona

Patrzyłem na przekazywanie tablic lub list, jak Python ma tendencję do ich wywoływania, do funkcji.

Czytałem coś o używaniu * args, na przykład:

def someFunc(*args)
    for x in args
        print x

Ale nie wiem, czy to jest dobre/złe. Nic nie działa tak, jak chcę. Jestem przyzwyczajony do łatwego przekazywania tablic do funkcji PHP i to mnie myli. Wygląda na to, że nie mogę tego zrobić:

def someFunc(*args, someString)

Ponieważ wyrzuca błąd.

Chyba kompletnie się pogubiłam i szukam kogoś do wyjaśnij mi to.
Author: the Tin Man, 2010-10-18

4 answers

Kiedy definiujesz swoją funkcję używając tej składni:

def someFunc(*args)
    for x in args
        print x

Mówisz mu, że oczekujesz zmiennej liczby argumentów. Jeśli chcesz przekazać listę (tablicę z innych języków), zrób coś takiego:

def someFunc(myList = [], *args)
    for x in myList:
        print x

Wtedy możesz to nazwać tak:

items = [1,2,3,4,5]

someFunc(items)

Musisz zdefiniować nazwane argumenty przed argumentami zmiennych, a zmienne argumenty przed argumentami słów kluczowych. Możesz też mieć to:

def someFunc(arg1, arg2, arg3, *args, **kwargs)
    for x in args
        print x

Który wymaga co najmniej trzech argumentów, oraz obsługuje zmienne liczby innych argumentów i argumentów słów kluczowych.

 45
Author: g.d.d.c,
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
2010-10-18 16:13:40

Możesz przekazywać listy tak jak inne typy:

l = [1,2,3]

def stuff(a):
   for x in a:
      print a


stuff(l)

Wyświetla listę l. pamiętaj, że listy są przekazywane jako referencje, a nie jako głęboka Kopia.

 18
Author: JoshD,
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
2010-10-18 20:27:00

Listy Pythona (które nie są tylko tablicami, ponieważ ich rozmiar można zmieniać w locie) są zwykłymi obiektami Pythona i mogą być przekazywane do funkcji jako Dowolna zmienna. Składnia * jest używana do rozpakowywania list, co prawdopodobnie nie jest czymś, co chcesz teraz zrobić.

 7
Author: Gintautas Miliauskas,
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
2010-10-18 16:14:18

Nie musisz używać gwiazdki, aby zaakceptować listę.

Po prostu podaj argumentowi nazwę w definicji i prześlij na listę taką jak

def takes_list(a_list):
    for item in a_list:
         print item
 5
Author: JAL,
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
2010-10-18 16:13:20