在BeautifulSoup文档中,函数定义如下:
def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
然后作为参数传递给函数:find_all()
:
soup.find_all(has_class_but_no_id)
让我感到惊讶的是它起作用了。我真的不知道机制在这里是如何工作的,这个函数(has_class_but_no_id
)如何在没有参数的情况下返回find_all()
函数的值?
答案 0 :(得分:1)
has_class_but_no_id
传递给find_all()
时, find_all
没有执行。
has_class_but_no_id
多次执行对def say_something(something_to_say):
print something_to_say
def call_another_function(func, argument):
func(argument)
call_another_function(say_something, "hi there")
的调用,并在此时将标记作为'tag'的值传递。这种模式利用了这样一个事实:在Python中,函数就是所谓的一阶对象 - 它们作为对象存在,你可以在变量中传递它们。
这允许函数接受其他函数并在以后运行它们 - 就像BeautifulSoup在这里一样。
尝试实验:
VBox vertikalBox = new VBox();
try (Scanner s = new Scanner("rebricek.txt")) {
while (s.hasNext()) {
//InputMismatchException
vertikalBox.getChildren().addAll(new Label(""+ s.nextInt() + " " + s.next() + " " + s.nextInt()));
s.nextLine();
}
} catch (Throwable t) {
// inputmismatchexception - PROBLEM
// this is for NoSuchElementException
System.err.println("Vyskytla sa chyba pri praci zo suborom");
}
上述答案取自this Reddit post。
此外,请参阅source code for find_all和call。