函数可以是函数定义的参数吗

时间:2020-05-01 05:28:17

标签: python function

定义自定义函数时,可以添加另一个函数作为参数之一。我在这个问题上徘徊,却没有得到背后的概念。

以下是一些使我感到困惑的例子。

def func1(x,y=len()):
    pass

我想知道在调用这些函数参数时会发生什么

我很感激,如果有人能指出用另一种函数作为参数来实现一个函数的所有方式。

2 个答案:

答案 0 :(得分:0)

函数是与其他对象一样的对象。定义一个

>>> def foo(param):
...     return "Do all the " + param
... 

您可以将其传递给另一个函数,然后让该函数进行调用

>>> def bar_1(func, param):
...     print(func(param))
... 
>>> bar_1(foo, "things")
Do all the things

您可以将函数对象用作默认参数

>>> def bar_2(func=foo, param=""):
...     print(func(param))
... 
>>> bar_2()
Do all the 

您甚至可以调用函数并使用其结果为参数设置默认值

>>> def bar_3(text=foo("things")):
...     print(text)
... 
>>> bar_3()
Do all the things

但是您不能调用函数来定义参数名称本身。在这里,您似乎想让len()的结果(返回一个int值,或者在这种情况下失败)作为参数的名称,但这违反了python的语法规则。

>>> def func1(x,y,len()):
  File "<stdin>", line 1
    def func1(x,y,len()):
                     ^
SyntaxError: invalid syntax

答案 1 :(得分:0)

您的代码示例都存在语法错误,因此不清楚您要做什么。

但是,可以将一个函数作为参数传递给另一个函数。常见的示例是回调函数或您可能希望在其他过程中应用的函数。

这是一个例子:

# print_os takes an integer and prints that many o's
def print_os(n):
    print('o' * n)


# here, f is expected to be a function, any function that takes an integer
def for_multiples_of_three(xs, f):
    for x in xs:
        if x % 3 == 0:
            f(x)


for_multiples_of_three([2, 6, 1, 9, 4, 5, 3], print_os)

结果:

oooooo
ooooooooo
ooo

或者这个:

def first_letter(s):
    return s[0] if s else ''


def for_each_word(s, f):
    return [f(x) for x in s.split()]


print(for_each_word('Not a very useful function', first_letter))

结果:

['N', 'a', 'v', 'u', 'f']

要注意的重要一点是,函数只是您可以在Python中完成的另一件事。类似于将数字,字符串或其他对象分配给变量以便以后使用,您可以将函数分配给变量并稍后调用。

示例中的错误是您添加了(),这意味着Python尝试调用该函数并从中获取结果-然后将结果传递给下一个函数。那不是用一个函数调用一个函数,而是用另一个函数的结果调用一个函数:

def three():
    return 3

def print_sum(x, y):
    print(x+y)

print_sum(2, three())

结果:

5