簡體   English   中英

Python將帶有參數的函數作為參數傳遞給高階函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM