Używam listę p = [[1,2,3],[4,5,6]]
Różnica między zamkiem (lista) i zamek (* lista)
Jeśli zrobić:
>>>d=zip(p)
>>>list(d)
[([1, 2, 3],), ([4, 5, 6],)]
Choć, co faktycznie chcę uzyskuje się, stosując w ten sposób:
>>>d=zip(*p)
>>>list(d)
[(1, 4), (2, 5), (3, 6)]
Dowiedziałem się, że dodanie "*" przed nazwą listy daje wymagane wyniki, ale nie widzę różnicy w ich działaniu. Czy możesz wyjaśnić różnicę?
Definicja funkcji * z '*' lub '**' jak to, o czym wspomniałeś, jest innym zastosowaniem operatora '*'. W tym kontekście służy do tworzenia [funkcji variadycznych] (http://en.wikipedia.org/wiki/Variadic_function). Są one związane z '*', o którym mówi OP, który bardziej przypomina cukier syntaktyczny dla operatora 'apply'. To zły pomysł, aby pomylić oba. –
Twierdzę, że są one dwoma aspektami tej samej koncepcji (chociaż różne zachowania). W jednym przypadku (definicja funkcji) określasz, że funkcja zaakceptuje kilka argumentów zgrupowanych pod jedną nazwą (args), podczas gdy w drugiej wysyłasz jedną nazwę do kilku argumentów. Są więc oczywiście różne, ale są ściśle połączone ze sobą pojęciami składniowymi, a zrozumienie sprawia, że rozumiesz drugie. – vermillon
Tak jak powiedziałem, są spokrewnione, ale biorąc pod uwagę brak wiedzy specjalistycznej w tej dziedzinie, będzie to bardziej mylące niż pouczające. –