Czy istnieje sposób na rozszerzenie krotki Python w funkcję - jako rzeczywiste parametry?
Na przykład tutaj expand()
działa magia:
some_tuple = (1, "foo", "bar")
def myfun(number, str1, str2):
return (number * 2, str1 + str2, str2 + str1)
myfun(expand(some_tuple)) # (2, "foobar", "barfoo")
Wiem, że można to zdefiniować myfun
jako myfun((a, b, c))
, ale oczywiście może istnieć starszy kod. Dzięki
python
tuples
parameter-passing
AkiRoss
źródło
źródło
Zauważ, że możesz także rozwinąć część listy argumentów:
źródło
some_func(*tuple_of_stuff, another_argument)
def func(a,b,c,d): print(a,b,c,d)
zargs = ('fee', 'fi', 'fo'); func(*args, 'fum')
Spójrz na samouczek Python w sekcjach 4.7.3 i 4.7.4. Mówi o przekazywaniu krotek jako argumentów.
Zastanowiłbym się również nad użyciem nazwanych parametrów (i przekazaniem słownika) zamiast krotki i przekazaniem sekwencji. Uważam, że użycie argumentów pozycyjnych jest złą praktyką, gdy pozycje nie są intuicyjne lub istnieje wiele parametrów.
źródło
Jest to metoda programowania funkcjonalnego. Podnosi funkcję rozszerzenia krotek z cukru składniowego:
apply_tuple = lambda f, t: f(*t)
Przykładowe użycie:
redefiniton curry
apply_tuple
pozwala zaoszczędzić wielepartial
połączeń na dłuższą metę.źródło
lambda f, t: f(*t)
nie używa zewnętrznych modułów i jestem początkującym w Pythonie, co jest dla mnie pomocne. Jest to podejście czysto funkcjonalne. Jeśli nie używasz tego stylu, ta odpowiedź nie jest dla ciebie.starmap
docs.python.org/3.7/library/itertools.html#itertools.starmap