Python把带参数的函数作为参数传递给高阶函数?

xv8emn3q  于 2022-12-20  发布在  Python
关注(0)|答案(1)|浏览(227)

当我试图将一个带参数(test)的函数传递给另一个函数(await_char)时,函数上的passod首先执行,跳过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,但我不知道如何将此可选参数

qni6mghb

qni6mghb1#

通常,当您向函数传递参数时,这些参数将在函数被调用时求值。在您的情况下,您需要一个指向稍后将被调用的函数的指针。有几种方法可以实现这一点,但最简单也是最先想到的是通过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 是更常见的默认值。对于msg"" 是一个不错的选择。

相关问题