Apakah ada cara untuk memperluas tupel Python ke fungsi - sebagai parameter aktual?
Sebagai contoh, inilah expand()
keajaibannya:
some_tuple = (1, "foo", "bar")
def myfun(number, str1, str2):
return (number * 2, str1 + str2, str2 + str1)
myfun(expand(some_tuple)) # (2, "foobar", "barfoo")
Aku tahu satu bisa mendefinisikan myfun
sebagai myfun((a, b, c))
, tapi tentu saja mungkin ada kode warisan. Terima kasih
python
tuples
parameter-passing
AkiRoss
sumber
sumber
Perhatikan bahwa Anda juga dapat memperluas bagian dari daftar argumen:
sumber
some_func(*tuple_of_stuff, another_argument)
def func(a,b,c,d): print(a,b,c,d)
denganargs = ('fee', 'fi', 'fo'); func(*args, 'fum')
Lihatlah bagian tutorial Python 4.7.3 dan 4.7.4. Ini berbicara tentang melewati tupel sebagai argumen.
Saya juga akan mempertimbangkan menggunakan parameter bernama (dan melewati kamus) daripada menggunakan tuple dan melewati urutan. Saya menemukan penggunaan argumen posisi menjadi praktik yang buruk ketika posisi tidak intuitif atau ada beberapa parameter.
sumber
Ini adalah metode pemrograman fungsional. Ini mengangkat fitur ekspansi tuple dari gula sintaks:
apply_tuple = lambda f, t: f(*t)
Contoh penggunaan:
kari redefinisi
apply_tuple
menghemat banyakpartial
panggilan dalam jangka panjang.sumber
lambda f, t: f(*t)
tidak menggunakan modul pihak ketiga dan saya pemula Python dan ini membantu saya. Ini adalah pendekatan fungsional murni. Jika Anda tidak menggunakan gaya ini maka jawaban ini bukan untuk Anda.starmap
docs.python.org/3.7/library/itertools.html#itertools.starmap