Bagaimanakah Multiple Dispatch Menyelesaikan Kekurangan Fungsi Lebihan Python?

Barbara Streisand
Lepaskan: 2024-11-24 05:27:13
asal
167 orang telah melayarinya

How Can Multiple Dispatch Solve Python's Lack of Function Overloading?

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")
Salin selepas log masuk

Dalam contoh ini, kami telah menentukan empat versi fungsi add_bullet:

  • Versi 1 mengendalikan peluru yang bergerak dari satu titik ke vektor dengan kelajuan tertentu.
  • Versi 2 mengendalikan peluru bergerak dari satu titik ke satu titik dengan kelajuan dan pecutan tertentu.
  • Versi 3 mengendalikan peluru yang dikawal oleh skrip.
  • Versi 4 mengendalikan peluru dengan laluan melengkung.

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan