Saya ingin membuat daftar fungsi yang menetapkan nilai default dari fungsi yang ditentukan sebelumnya sehingga nanti saya dapat memanggilnya hanya dengan satu argumen. Masalahnya adalah argumen pertama diperlukan jadi saya mendapatkan kesalahan. Apa cara paling Pythonic untuk melakukannya?

def plus(num, a1):
    return num + a1

def div(num, a1):
    return num / a1;

acts = [plus(a1 = 3), div(a1 = 3), div(a1 = 2)]

num = 9
for act in acts:
    num = act(num)

Perilaku yang saya inginkan adalah agar num menjadi 9 -> 12 -> 4 -> 2

1
Kevin Shannon 4 Juni 2019, 22:01

2 jawaban

Jawaban Terbaik

Gunakan funtools.partial, Anda perlu membalik parameter karena sebagian menerapkannya secara berurutan:

from functools import partial

def plus(a1, num):
    return num + a1

f = partial(plus, 3)

Sebagai contoh:

>>> f = partial(plus, 3)
>>> f(10)
13

Atau gunakan default:

def div(num, a1=1):
    return num / a1

fdiv = partial(div, a1=3)

Sebagai contoh:

>>> acts = [partial(plus, 3), partial(div,a1 = 3), partial(div, a1 = 2)]
>>> num = 9
>>> for act in acts:
...     num = act(num)
...
>>> num
2.0
4
Netwave 4 Juni 2019, 19:06

Untuk kasus Anda, Anda dapat melakukan sesuatu seperti:

def plus(num, a1):
    return num + a1

def div(num, a1):
    return num / a1;

acts = [(plus, 3), (div, 3), (div, 2)]

num = 9
for func, arg in acts:
    print(func(num, arg))

Yang memungkinkan Anda untuk memasukkan argumen terlebih dahulu ke daftar dan mengulanginya.

1
Austin 4 Juni 2019, 19:06