Saya memiliki fungsi Python yang membutuhkan beberapa argumen. Beberapa argumen ini dapat dihilangkan dalam beberapa skenario.
def some_function (self, a, b, c, d = None, e = None, f = None, g = None, h = None):
#code
Argumen d
melalui h
adalah string yang masing-masing memiliki makna berbeda. Penting bahwa saya dapat memilih parameter opsional mana yang akan lulus dalam kombinasi apa pun. Misalnya,, (a, b, C, d, e)
atau (a, b, C, g, h)
, atau (a, b, C, d, e, f
, atau semuanya (ini adalah pilihan saya).
Akan lebih bagus jika saya bisa membebani fungsinya - tetapi saya membaca bahwa Python tidak mendukung overloading. Saya mencoba untuk memasukkan beberapa argumen int yang diperlukan dalam daftar - dan mendapatkan kesalahan ketidakcocokan argumen.
Saat ini saya mengirim string kosong untuk menggantikan beberapa argumen pertama yang hilang sebagai placeholder. Saya ingin dapat memanggil fungsi hanya menggunakan nilai aktual.
Apakah ada cara untuk melakukan ini? Bisakah saya melewati daftar alih-alih daftar argumen?
Sekarang prototipe menggunakan ctypes terlihat seperti:
_fdll.some_function.argtypes = [c_void_p, c_char_p, c_int, c_char_p, c_char_p, c_char_p, c_char_p, c_char_p]
Jawaban:
Cobalah menyebutnya seperti:
obj.some_function( '1', 2, '3', g="foo", h="bar" )
. Setelah argumen posisi yang diperlukan, Anda dapat menentukan argumen opsional spesifik berdasarkan nama.sumber
Cukup gunakan
*args
parameter, yang memungkinkan Anda untuk memberikan argumen sebanyak yang Anda inginkan setelaha,b,c
. Anda harus menambahkan beberapa logika ke petaargs
->c,d,e,f
tetapi ini merupakan "cara" overloading.Dan itu akan mencetak nilai
c,d,e,f
Demikian pula Anda bisa menggunakan
kwargs
argumen dan kemudian Anda bisa memberi nama parameter Anda.Lalu
kwargs
akan memiliki kamus semua parameter yang kunci dinilai setelahnyaa,b
sumber
c = kwargs.get('c', None)
itu digunakan? Apakah diperlukan di setiap fungsi yang memiliki argumen opsional? Dalam kode Anda, Anda hanya memiliki 2 argumen opsional. Bagaimana jika pengguna menginginkan argumen laine
? Bagaimana saya bisa mengubah kode sampel Anda untuk jumlah yang tidak diketahui args opsional, untuk ex:def my_func(a, b, *args, **kwagars): obj = <do something with a & b> obj.add(c) obj.add(d) continue obj.add(for e, f, g...)
? Apakah saya harus memasukkanc = kwargs.get('c', None) etc
sebelum melakukanobj.add(c, d, ...)
?