Pemuatan Lebihan Fungsi Python: Penghantaran Berbilang sebagai Penyelesaian
Python, tidak seperti beberapa bahasa pengaturcaraan lain, tidak menyokong lebihan muatan kaedah. Ini bermakna anda tidak boleh menentukan berbilang fungsi dengan nama yang sama tetapi parameter yang berbeza. Ini boleh menjadi sangat mencabar apabila anda perlu mencipta fungsi dengan gelagat yang berbeza-beza berdasarkan argumen input.
Satu penyelesaian yang berpotensi untuk isu ini ialah menggunakan berbilang penghantaran, yang membolehkan fungsi dihantar secara dinamik berdasarkan jenis hujah mereka. Pendekatan ini dilaksanakan dalam Python melalui penggunaan pustaka multipledispatch.
Untuk menunjukkan berbilang penghantaran dalam Python, mari kita pertimbangkan contoh mencipta peluru dengan sifat yang berbeza. Kami boleh mentakrifkan empat versi berbeza bagi fungsi add_bullet, setiap satu mengendalikan gabungan argumen tertentu:
from multipledispatch import dispatch from collections import namedtuple Sprite = namedtuple('Sprite', ['name']) Point = namedtuple('Point', ['x', 'y']) Curve = namedtuple('Curve', ['x', 'y', 'z']) Vector = namedtuple('Vector', ['x','y','z']) @dispatch(Sprite, Point, Vector, int) def add_bullet(sprite, start, direction, speed): print("Called Version 1") @dispatch(Sprite, Point, Point, int, float) def add_bullet(sprite, start, headto, speed, acceleration): print("Called version 2") @dispatch(Sprite, LambdaType) def add_bullet(sprite, script): print("Called version 3") @dispatch(Sprite, Curve, int) def add_bullet(sprite, curve, speed): print("Called version 4")
Dalam contoh ini, kami telah menentukan empat versi fungsi add_bullet:
Untuk menggunakan fungsi add_bullet, kami hanya menyediakan hujah yang sesuai untuk tingkah laku yang diingini. Contohnya:
sprite = Sprite('Turtle') start = Point(1,2) direction = Vector(1,1,1) speed = 100 #km/h acceleration = 5.0 #m/s**2 script = lambda sprite: sprite.x * 2 curve = Curve(3, 1, 4) headto = Point(100, 100) # somewhere far away add_bullet(sprite, start, direction, speed) # Called Version 1 add_bullet(sprite, start, headto, speed, acceleration) # Called version 2 add_bullet(sprite, script) # Called version 3 add_bullet(sprite, curve, speed) # Called version 4
Seperti yang anda lihat, pustaka multipledispatch membenarkan kami mentakrifkan berbilang fungsi dengan nama yang sama tetapi jenis parameter yang berbeza. Ini menyediakan cara yang mudah dan fleksibel untuk mengendalikan fungsi dengan gelagat yang berbeza-beza, tanpa memerlukan hujah kata kunci atau konvensyen penamaan fungsi yang kompleks.
Atas ialah kandungan terperinci Bagaimanakah Multiple Dispatch Menyelesaikan Kekurangan Fungsi Lebihan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!