Moh*_*hit 5 python-2.7 selenium-webdriver
我正在用 python 学习 selenium webdriver,并在下面的代码行中遇到了“lambda”。作者这里没有解释 lambda 的用法:
search_button = WebDriverWait(self.driver, 10).until(lambda s:s.find_element_by_name("btnG"))
search_button.click()
Run Code Online (Sandbox Code Playgroud)
我读过关于 lambda 的文章,它说 lambda 会动态创建函数,有人说它用于返回表达式。所以现在我很困惑,不确定它在这里有什么不同。
在Python中,函数是对象,因此您可以将它们作为参数传递给其他函数。唯一的事情是,如果你用 () 传递一个函数,你就会同时调用该函数。因此可以传递不带任何参数的函数,这样就可以在稍后传递给它的函数内部调用它。但是,如果您需要在传递函数本身时向函数传递参数,则需要将其包装在 lambda 中,以便仅在需要时才调用它。
回答它如何获得s价值的问题。如果您查看此处的来源,则说明了一切:
"""调用驱动程序提供的方法作为参数,直到返回值不为 False。"""
实际代码也是不言自明的:
def until(self, method, message=''):
screen = None
stacktrace = None
end_time = time.time() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.time() > end_time:
break
raise TimeoutException(message, screen, stacktrace)
Run Code Online (Sandbox Code Playgroud)