[英]Python pass function with parameters as parameter to higher order function?
每當我嘗試將一個帶有參數 (test) 的函數傳遞給函數 (await_char) 時,函數上的密碼首先執行,跳過await_char
的運行時順序?
`
def await_char(param, func="", msg=""):
import keyboard
if msg == "":
msg_out = 'Press {} to continue'.format(param.upper())
else:
msg_out = msg
print(msg_out)
while True:
if keyboard.is_pressed("c"):
break
if keyboard.is_pressed("C"):
break
if keyboard.is_pressed(param):
if func:
func()
break
def test(msg):
print(msg)
await_char("y", "press some button, like: Y", test("John"))
`
我嘗試了 args、kwargs 但我不知道如何制作這個可選參數
通常,當您將參數傳遞給函數時,這些參數會在函數被調用時求值。 在您的情況下,您需要一個指向稍后將調用的函數的指針。 有幾種方法可以做到這一點,但首先想到的最簡單的方法是通過lambda
運算符。 它允許您創建一個無名函數,然后在以后使用該無名函數。 但是,不僅如此,當您定義未命名函數時,您可以在定義時傳遞任何您想要的參數。
因此,對代碼進行的最簡單更改是更改:
await_char("y", "press some button, like: Y", test("John"))
到:
await_char("y", "press some button, like: Y", lambda: test("John"))
另外,作為旁注,請與您的論證順序保持一致。 您定義:
def await_char(param, func="", msg="")
但后來或多或少通過await_char(param, msg, func)
調用它......必須保持順序,否則你會得到意想不到的結果。
此外,作為一個品味問題, func=""
不是最好的默認選擇。 通常對於像func
這樣的變量, None是更常見的默認值。 "" for msg
是一個不錯的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.