Buna kısmi işlevler denir ve bunu yapmanın en az 3 yolu vardır. En sevdiğim yol lambda kullanmaktır çünkü ekstra pakete bağımlılığı önler ve en az ayrıntılıdır. Bir fonksiyonunuz olduğunu ve diğer fonksiyonun değerine karar vereceği şekilde parametre olarak başka bir fonksiyona add(x, y)
geçmek istediğinizi varsayın .add(3, y)
y
Lambda kullan
# generic function takes op and its argument
def runOp(op, val):
return op(val)
# declare full function
def add(x, y):
return x+y
# run example
def main():
f = lambda y: add(3, y)
result = runOp(f, 1) # is 4
Kendi Paketleyicinizi Yaratın
Burada kısmi işlevi döndüren bir işlev oluşturmanız gerekir. Bu çok daha ayrıntılı.
# generic function takes op and its argument
def runOp(op, val):
return op(val)
# declare full function
def add(x, y):
return x+y
# declare partial function
def addPartial(x):
def _wrapper(y):
return add(x, y)
return _wrapper
# run example
def main():
f = addPartial(3)
result = runOp(f, 1) # is 4
Functools'tan kısmi kullanın
Bu, lambda
yukarıda gösterilenle hemen hemen aynıdır . Öyleyse neden buna ihtiyacımız var? Bunun birkaç nedeni var . Kısacası, partial
bazı durumlarda biraz daha hızlı olabilir ( uygulanmasına bakın ) ve lambda'nın geç bağlanmasına karşı erken bağlanma için kullanabilirsiniz.
from functools import partial
# generic function takes op and its argument
def runOp(op, val):
return op(val)
# declare full function
def add(x, y):
return x+y
# run example
def main():
f = partial(add, 3)
result = runOp(f, 1) # is 4
def action1(arg1, arg2=None, arg3=None)
örneğin arg3'e atanmayı düşündüğünüz bir argümanı nasıl iletebilirsiniz?