如何将c#lambda函数完全翻译成python?

2024-10-05 14:26:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚接触lambda,不知道是否有人能给我一些提示,如何将C#return语句翻译成python,而且这是可能的。在

WebDrivrWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
var imagesLink = wait.Until(d => 
                               {
                                  var elements = driver.FindElements(By.ClassName("kl"));
                                  if (elements.Count > 0)
                                  return elements[0];
                                  return null;
                               });
imagesLink.Click();

在FB上运行测试时,简单的selenium explicit waits对我来说不起作用,而且几乎所有时候我都收到超时错误。 到目前为止,我已经找到了wait赋值函数,但是不知道如何在lambda中创建带有返回值的变量和if语句。有什么好消息吗?在


Tags: lambdanewreturnifvardriverelements语句
2条回答

这是可能的(但是丑陋、令人困惑和不必要的),不需要调用find_elements两次,使用嵌套lambda:

f = lambda: (lambda x: x[0] if len(x) > 0 else "Argh" )([1,2,3])
f()  # returns 1

f = lambda: (lambda x: x[0] if len(x) > 0 else "Argh" )([])
f()  # returns "Argh"

因此,对于您的硒示例,您可以做如下操作:

^{pr2}$

但是,由于您只是尝试返回第一个元素,因此您应该能够更简单地使用selenium 2expected conditions API

wait.until(EC.presence_of_element_located((By.CLASS_NAME, "k1"))

嵌套lambda是一个有趣的技巧,但我强烈建议您不要在实际代码中使用它们!在

Python lambda函数非常有限,只能包含一个表达式。虽然从理论上讲,可以将lambda作为一个单独的表达式写在C示例中,因为您不能执行赋值,所以必须调用driver.FindElements两次,这是冗长且低效的。相反,请使用命名函数。在

相关问题 更多 >