selenium python:webdriverwait.until 语句中的“lambda”是什么

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 会动态创建函数,有人说它用于返回表达式。所以现在我很困惑,不确定它在这里有什么不同。

T.C*_*kij 4

在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)