有参数的函数如何不带参数调用

时间:2018-06-29 07:42:59

标签: python

从下面的代码中可以看到,不带参数地调用了mysearch。如何调用此函数?这个技术怎么称呼?该方法从何处获取参数(标签)?对不起,我在任何地方都找不到答案...

def myserach(tag):
    return tag.has_attr('ResultsAd') # and tag['li']

with open('index.html', 'rb') as file:
    soup = BeautifulSoup(file, "html.parser")

elements1 = soup.find_all('div', attrs={"class": "ResultsAd"})
elements1 = soup.find_all(myserach)

4 个答案:

答案 0 :(得分:5)

您的代码段中未调用该函数。

也许这个例子可以帮助您更好地理解。

def foo(str):
    print(str)

def bar(arg):
    arg("now calling foo")

bar(foo)

答案 1 :(得分:1)

elements1 = soup.find_all(my_search)的这行中,您没有调用my_search,而是将my_search函数传递给soup.find_all函数。

注意:您可以使用keyword arguments来调用函数而无需传递其参数。喜欢:

def my_fun(value=5):
    print(value)

您可以通过两种方式调用此函数:

my_fun(10) #here value will be 10
my_fun() #here value will be 5

答案 2 :(得分:1)

这不是在“调用一个函数”,而是将一个函数名(C terma中的一个函数Poiter)作为参数传递给另一个函数,该函数随后将使用适当数量的参数进行调用。

答案 3 :(得分:1)

实际上,您没有在调用该函数。不带参数的函数调用看起来像function()。您不会给出find_all调用的mysearch结果,而是函数本身。然后可以在find_all内部调用该函数。这些以其他函数为参数的函数称为高阶函数。这是一个高阶函数的示例:

def map(xs, f): 
  result = []
  for x in xs: 
    result.append(f(x))
  return result

所以想法是,函数只是一个值,调用的东西只是它们的方法(__call__)。