为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕后森 2022-11-01 15:12:59
当我们定义我们的自定义函数时,我们可以添加另一个函数作为我们的参数之一。我在这个问题上徘徊,并没有得到这背后的概念。以下是一些让我感到困惑的例子。def func1(x,y=len()):     pass我想知道当我们调用它们时这些函数参数会发生什么我很感激如果有人能指出用另一个函数作为参数来实现一个函数的所有方法。
查看完整描述

2 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

函数是像其他任何东西一样的对象。一旦你定义了一个


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


查看完整回答
反对 回复 2022-11-01
?
白衣非少年

TA贡献1155条经验 获得超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


查看完整回答
反对 回复 2022-11-01
  • 2 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信