Pertanyaan Fungsi Python sebagai argumen fungsi?


Dapatkah fungsi Python menjadi argumen dari fungsi lain?

Mengatakan:

def myfunc(anotherfunc, extraArgs):
    # run anotherfunc and also pass the values from extraArgs to it
    pass

Jadi ini pada dasarnya adalah dua pertanyaan:

  1. Apakah itu diperbolehkan?
  2. Dan jika ya, bagaimana cara menggunakan fungsi di dalam fungsi lainnya? Apakah saya perlu menggunakan exec (), eval () atau sesuatu seperti itu? Tidak pernah perlu mengacaukan mereka.

BTW, extraArgs adalah daftar / tupel argumen anotherfunc.


75
2018-06-09 07:47


asal


Jawaban:


Bisakah fungsi Python menjadi argumen   fungsi lain?

Iya nih.

def myfunc(anotherfunc, extraArgs):
    anotherfunc(*extraArgs)

Untuk lebih spesifik ... dengan berbagai argumen ...

>>> def x(a,b):
...     print "param 1 %s param 2 %s"%(a,b)
...
>>> def y(z,t):
...     z(*t)
...
>>> y(x,("hello","manuel"))
param 1 hello param 2 manuel
>>>

89
2018-06-09 07:48



Inilah cara lain menggunakan *args (dan juga opsional), **kwargs:

def a(x, y):
  print x, y

def b(other, function, *args, **kwargs):
  function(*args, **kwargs)
  print other

b('world', a, 'hello', 'dude')

Keluaran

hello dude
world

Perhatikan itu function, *args, **kwargs harus dalam urutan itu dan harus menjadi argumen terakhir untuk fungsi yang memanggil fungsi.


25
2017-09-16 21:01



Fungsi dalam Python adalah objek kelas satu. Tetapi definisi fungsi Anda sedikit off.

def myfunc(anotherfunc, extraArgs, extraKwArgs):
  return anotherfunc(*extraArgs, **extraKwArgs)

15
2018-06-09 07:50



Tentu, itu sebabnya python mengimplementasikan metode berikut di mana parameter pertama adalah fungsi:

  • map (function, iterable, ...) - Menerapkan fungsi ke setiap item iterable dan kembalikan daftar hasilnya.
  • filter (fungsi, iterable) - Buat daftar dari elemen-elemen tersebut iterable untuk mana fungsi mengembalikan nilai true.
  • mengurangi (fungsi, iterable [, initializer]) - Terapkan fungsi dua argumen secara kumulatif ke item iterable, dari kiri ke benar, sehingga mengurangi iterable ke nilai tunggal.
  • lambdas

3
2018-06-09 08:09



  1. Ya, itu diizinkan.
  2. Anda menggunakan fungsi seperti yang Anda lakukan: anotherfunc(*extraArgs)

2
2018-06-09 07:49



  1. Iya nih. Dengan memasukkan pemanggilan fungsi dalam argumen input Anda, Anda dapat memanggil dua (atau lebih) fungsi sekaligus.

Sebagai contoh:

def anotherfunc(inputarg1, inputarg2):
    pass
def myfunc(func = anotherfunc):
    print func

Saat Anda menghubungi myfunc, Anda melakukan ini:

myfunc(anotherfunc(inputarg1, inputarg2))

Ini akan mencetak nilai kembalian dari otherfunc.

Semoga ini membantu!


2
2018-05-17 07:02



def x(a):
    print(a)
    return a

def y(a):
    return a

y(x(1))

0
2018-04-29 11:34



def x(a):
    print(a)
    return a

def y(func_to_run, a):
    return func_to_run(a)

y(x, 1)

Itu saya pikir akan menjadi sampel yang lebih tepat. Sekarang apa yang saya ingin tahu adalah apakah ada cara untuk mengkodekan fungsi untuk digunakan dalam penyerahan argumen ke fungsi lain. Saya percaya ada di C ++, tetapi dengan Python saya tidak yakin.


0
2017-07-26 14:33