İşlev aşırı yüklemesi Python'da yerleşik olmayabilir, ancak onu taklit etmenin yolları vardır.

İşlev aşırı yüklemesi, bazı programlama dillerinde aynı işlevin çeşitlemelerini tanımlamanıza olanak tanıyan bir özelliktir. Her değişken aynı ada sahiptir ancak benzersiz işlev imzalarıyla farklı uygulamalara sahiptir.

Bu teknik, bir işleve iletilen bağımsız değişkenlerin türüne ve sayısına bağlı olarak farklı işlemler gerçekleştirmenize olanak tanır.

C++ ve Java gibi dillerden farklı olarak Python, varsayılan olarak aşırı işlev yüklemeyi desteklemez ancak benzer işlevsellik elde etmenin yolları vardır.

Python İşlev Aşırı Yüklemesini Nasıl Ele Alır?

Python'da aynı işlevi, her tanımda farklı parametrelerle, veri türleriyle veya her ikisiyle birden çok kez tanımlayabilirsiniz. Ancak Python, işlevi çağırdığınızda yalnızca son tanımını tanıyacaktır. İşte bir örnek:

defarithmetics(a, b):
return a - b

defarithmetics(a, b, c, d):
return a + b - c * d

print(arithmetics(1, 2, 3, 5)) # returns -12
print(arithmetics(1, 2)) # returns missing positional arguments error

instagram viewer

Java gibi nesne yönelimli diller genellikle işlev ve yöntem aşırı yüklemesini destekler. Yöntem, bir sınıf içinde tanımladığınız bir işlevdir.

Yukarıdaki kodda Python yalnızca ikinci tanımını tanıyacaktır. aritmetik() projenizde çağırmaya çalıştığınızda işlev. İşlevi ilk tanımlandığı gibi iki bağımsız değişkenle çağırmaya çalışırsanız, "gerekli konumsal bağımsız değişkenler eksik" diyen bir hata alırsınız.

Fonksiyonu dört argümanla çağırdığınızda hata almazsınız. Bu, Python'un en son örneğiyle işlevin üzerine yazdığı anlamına gelir. Bu aşırı yükleme davranışı değildir, dolayısıyla bununla baş etmeniz gerekir.

Dolayısıyla Python, varsayılan olarak aşırı işlev yüklemesini ele almaz, ancak programlarınızdaki davranışını simüle etmek için kullanabileceğiniz bazı püf noktaları vardır.

Yöntem 1: İsteğe Bağlı Parametreleri veya Varsayılan Bağımsız Değişkenleri Kullanma

Varsayılan argümanlarla bir işlev tanımlayarak aşırı yükleme sağlayabilirsiniz. İşte bir örnek:

defarithmetics(a, b=0, c=0):

Arguments:
a: The first number.
b: The second number (optional).
c: The third number (optional).

return a - b + c

Bu işlevin üç parametresi vardır, ancak bunlardan ikisinin varsayılan değerleri vardır. Bu, onu bir ila üç argümanla arayabileceğiniz anlamına gelir:

print(arithmetics(1)) # returns 1
print(arithmetics(2, 5)) # returns -3
print(arithmetics(10, 3, 4)) # returns 11

Bu yaklaşım, işlevi birkaç farklı şekilde çağırmanıza olanak tanısa da, uzun vadede pek etkili değildir. İşte sınırlamalarından bazıları:

  • Yalnızca tamsayı veya kayan noktalı argümanları iletebilirsiniz.
  • Fonksiyonun davranışında önemli bir değişiklik yoktur. Örneğin, bir şeklin alanını hesaplamak ve hatta yazdırmak için davranışını değiştiremezsiniz. Selam Dünya.

Yöntem 2: Değişken Bağımsız Değişkenleri Kullanma

Python'da fonksiyon aşırı yüklemesi için değişken argümanlar kullanmak için şunları yapmalısınız: işlevinizi tanımlarken args parametresini ekleyin. argümanlar parametresi, işlevinizi çağırırken birden fazla konumsal argüman iletmenize olanak tanır. İşte bir örnek:

defarithmetics(a, *args):

Arguments:
a: The first number.
*args: A variable number of arguments (optional).

args_sum = 0

for num in args:
args_sum *= num

return a - args_sum

print(arithmetics(1)) # returns 1
print(arithmetics(2, 5)) # returns 2
print(arithmetics(10, 3, 4, 2, 4, 6)) # returns 10

Yukarıdaki fonksiyon iki argüman alır: adı verilen zorunlu bir argüman A ve argümanlar Argüman, ihtiyacınız olduğu kadar çok argüman girmenize olanak tanır.

Birden fazla argüman alabilmesine rağmen, yukarıdaki fonksiyon yalnızca değişken argümanlar üzerinde, yani değişken tarafından temsil edilen argümanlar üzerinde çarpma işlemini gerçekleştirebilir. argümanlar anahtar kelime.

Birden fazla işlem gerçekleştirmek istiyorsanız, kodunuza koşullu ifadeler ekleyinve bu hızla karmaşık hale gelebilir.

Yöntem 3: Çoklu Gönderim Dekoratörünü Kullanma

Çoklu dağıtım dekoratörü, bağımsız değişkenlerinin türüne bağlı olarak tek bir işlevin birden çok uygulamasını veya örneğini tanımlamanıza olanak tanıyan bir Python kitaplığıdır. Bu, aynı işlevi farklı veri türleriyle tanımlayabileceğiniz ve davranışını tamamen değiştirebileceğiniz anlamına gelir.

Çoklu dağıtım dekoratörünü kullanmak için şu adımları izleyin:

  1. Düzenlemek çoklu yol Python ortamınızda:
    pip install multipledispatch
  2. İşlev(ler)inizi aşağıdakilerle dekore edin: @sevk etmek dekoratör. @sevk etmek dekoratör bir Python dekoratörü bu, birden fazla gönderimi uygulamanıza olanak tanır. Kendisine ilettiğiniz argümanlara göre uygun işlevi otomatik olarak gönderecektir. Şunu kullanabilirsiniz: @sevk etmek Bu modeli takip ederek dekoratör:
    from multipledispatch import dispatch

    @dispatch(data type1, data type2, data typeX)
    defyour_function(a, b, c, x):
    pass
    # perform your operations here

Python'da işlev aşırı yüklemesi için çoklu gönderim dekoratörünü kullanan bir örnek:

from multipledispatch import dispatch

@dispatch(int, int)
defadd(a, b):

Arguments:
a: Any integer.
b: Any integer.

return a + b

@dispatch(int, list)
defadd(a, b):

Arguments:
a: Any integer.
b: Any Python list.

b.append(a)
return b

# returns 3
print(add(1, 2))

# returns [2, 3, 4, 5, 'w', 'done', 1]
print(add(1, [2, 3, 4, 5, 'w', 'done']))

Yukarıdaki kod parçacığı iki örneğini tanımlar: eklemek() işlev. İlk örnek, argüman olarak iki tamsayıyı alır ve toplamlarını döndürür.

Bu arada, bu fonksiyonun ikinci versiyonu bir tam sayı ve bir liste alıyor. Tamsayıyı listeye ekler ve yeni listeyi döndürür.

Python'da fonksiyon aşırı yüklemesine yönelik bu yaklaşım, özellikle yönteminizin davranışını değiştirmeniz gerekiyorsa, size çok fazla esneklik sağlar. Daha fazlasını şuradan öğrenebilirsiniz: çoklu gönderim belgeleri.

Python'da İşlev Aşırı Yüklemesine Yönelik En İyi Yaklaşım

İşlev aşırı yüklemesine yönelik yaklaşımınız, neyi başarmaya çalıştığınıza bağlı olmalıdır. Görevinizi varsayılan veya değişken argümanları kullanarak tamamlayabiliyorsanız, çoklu dağıtım dekoratörü aşırıya kaçabilir. Bununla birlikte, çoklu dağıtım dekoratörü genellikle verimliliği ve doğruluğu açısından en iyi seçenektir.

Bu dekoratör, Python'da fonksiyon aşırı yüklemesini uygulamak için temiz ve esnek bir yol sağlar. Bağımsız değişkenlerinin türüne göre tek bir işlevin birden çok uygulamasını tanımlamanıza olanak tanır.

Bu yaklaşımla, karmaşık koşul ifadelerine ihtiyaç duymadan, farklı parametre türlerini kabul edebilen esnek işlevler oluşturabilirsiniz.