Python 将一个方法传递给另一个方法
Python passing a method to another method
我想做的是创建一个时间轮询 method/mechanism,作为输入接收它需要的方法 运行 在时间循环内(来自其他 modules\classes 和可能有也可能没有输入参数本身),退出条件(True/False/String/Int)和超时
这是我创建的
def time_polling(polled_method,exit_condition,timer):
elapsed_time = 0
sleep_period = 10
while elapsed_time<=int(timer):
if polled_method == exit_condition:
return True
time.sleep(sleep_period)
elapsed_time+=sleep_period
return False
我是这样称呼它的:
timed_polling(lambda: validation_installation.ValidationInstallation.check_installed_product(),True,60)
问题是,如果我在没有 lambda 的情况下调用该方法,那么显然调用是在调用命令内部进行的,使用 lambda 似乎没有在 timed_polling 方法内部调用该方法。
我错过了什么?
为什么这么复杂?不需要 lambda。
timed_polling(lambda: validation_installation.ValidationInstallation.check_installed_product(),True,60)
应该只是
# note: no parentheses, pass function object itself
timed_polling(validation_installation.ValidationInstallation.check_installed_product,True,60)
然后在代码中这是错误的,因为 polled_method
是一个方法,需要调用它 now 所以:
if polled_method == exit_condition:
return True
应该是(加()调用):
if polled_method() == exit_condition:
return True
否则不调用该方法
我想做的是创建一个时间轮询 method/mechanism,作为输入接收它需要的方法 运行 在时间循环内(来自其他 modules\classes 和可能有也可能没有输入参数本身),退出条件(True/False/String/Int)和超时 这是我创建的
def time_polling(polled_method,exit_condition,timer):
elapsed_time = 0
sleep_period = 10
while elapsed_time<=int(timer):
if polled_method == exit_condition:
return True
time.sleep(sleep_period)
elapsed_time+=sleep_period
return False
我是这样称呼它的:
timed_polling(lambda: validation_installation.ValidationInstallation.check_installed_product(),True,60)
问题是,如果我在没有 lambda 的情况下调用该方法,那么显然调用是在调用命令内部进行的,使用 lambda 似乎没有在 timed_polling 方法内部调用该方法。 我错过了什么?
为什么这么复杂?不需要 lambda。
timed_polling(lambda: validation_installation.ValidationInstallation.check_installed_product(),True,60)
应该只是
# note: no parentheses, pass function object itself
timed_polling(validation_installation.ValidationInstallation.check_installed_product,True,60)
然后在代码中这是错误的,因为 polled_method
是一个方法,需要调用它 now 所以:
if polled_method == exit_condition:
return True
应该是(加()调用):
if polled_method() == exit_condition:
return True
否则不调用该方法