Saya memecahkan teka-teki menggunakan python dan tergantung pada teka-teki mana yang saya pecahkan, saya harus menggunakan seperangkat aturan khusus. Bagaimana saya bisa melewatkan fungsi ke fungsi lain dengan Python?
Contoh
def Game(listA, listB, rules):
if rules == True:
do...
else:
do...
def Rule1(v):
if "variable_name1" in v:
return False
elif "variable_name2" in v:
return False
else:
return True
def Rule2(v):
if "variable_name3" and "variable_name4" in v:
return False
elif "variable_name4" and variable_name1 in v:
return False
else:
return True
Ini hanyalah kode semu dan oleh karena itu tidak spesifik tetapi saya mendapatkan kode untuk dikompilasi tetapi saya perlu tahu bagaimana memanggil fungsi Game
dan apakah itu didefinisikan dengan benar karena aturan akan dialihkan ke salah satu Rule1(v)
atau Rule2(v)
.
python
function
first-class-functions
jchanger
sumber
sumber
myfunction
:myfunction
berarti fungsi itu sendiri,myfunction()
berarti memanggil fungsi dan mendapatkan nilai kembaliannya.Perlakukan fungsi sebagai variabel dalam program Anda sehingga Anda dapat meneruskannya ke fungsi lain dengan mudah:
def test (): print "test was invoked" def invoker(func): func() invoker(test) # prints test was invoked
sumber
invoker
fungsi kemudian perlu menyediakan argumen tersebut saat memanggil fungsi.Untuk meneruskan fungsi, dan argumen apa pun ke fungsi:
from typing import Callable def looper(fn: Callable, n:int, *args, **kwargs): """ Call a function `n` times Parameters ---------- fn: Callable Function to be called. n: int Number of times to call `func`. *args Positional arguments to be passed to `func`. **kwargs Keyword arguments to be passed to `func`. Example ------- >>> def foo(a:Union[float, int], b:Union[float, int]): ... '''The function to pass''' ... print(a+b) >>> looper(foo, 3, 2, b=4) 6 6 6 """ for i in range(n): fn(*args, **kwargs)
Bergantung pada apa yang Anda lakukan, masuk akal untuk mendefinisikan
decorator
, atau mungkin menggunakanfunctools.partial
.sumber
Berikan saja, seperti ini:
dan kemudian fungsi Game Anda akan terlihat seperti ini (masih pseudocode):
def Game(listA, listB, rules=None): if rules: # do something useful # ... result = rules(variable) # this is how you can call your rule else: # do something useful without rules
sumber
Nama fungsi bisa menjadi nama variabel (dan dengan demikian diteruskan sebagai argumen) dengan menghilangkan tanda kurung. Nama variabel bisa menjadi nama fungsi dengan menambahkan tanda kurung.
Dalam contoh Anda, samakan variabel
rules
dengan salah satu fungsi Anda, tanpa menggunakan tanda kurung dan penyebutan argumen. Kemudian digame()
fungsi Anda , panggilrules( v )
dengan tanda kurung danv
parameter.if puzzle == type1: rules = Rule1 else: rules = Rule2 def Game(listA, listB, rules): if rules( v ) == True: do... else: do...
sumber