当我试图将一个带参数(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,但我不知道如何将此可选参数
1条答案
按热度按时间qni6mghb1#
通常,当您向函数传递参数时,这些参数将在函数被调用时求值。在您的情况下,您需要一个指向稍后将被调用的函数的指针。有几种方法可以实现这一点,但最简单也是最先想到的是通过
lambda
操作符。它允许您创建一个无名函数,然后在稍后使用该无名函数。但是,不仅如此,当你定义一个未命名的函数时,你可以在定义的时候传递任何你想要的参数。因此,对代码最简单的更改是:
致:
另外,作为旁注,请与参数顺序保持一致。您定义:
但后来或多或少通过
await_char(param, msg, func)
调用它...顺序必须保持,否则会得到意想不到的结果。此外,根据个人喜好,
func=""
不是最佳默认选择。通常对于func
这样的变量,None 是更常见的默认值。对于msg
,"" 是一个不错的选择。