【问题标题】:What's the difference between object.function and object.function() in python3? [closed]python3中的object.function和object.function()有什么区别? [关闭]
【发布时间】:2016-02-26 01:56:26
【问题描述】:

承认:在python中,我有时在调用方法时忘记包含(),所以我不小心使用了object.method而不是object.method()

我经常遇到的错误似乎表明我的object.method 调用已返回方法本身,而不是调用该方法。我想知道这是否意味着通过使用object.method 或者只是function 您可以将函数/方法作为参数传递?

奖励:如果是这样,这有哪些应用?例如,我知道 lambda 可用于将匿名函数作为参数传递。

【问题讨论】:

  • 函数是python中的对象,所以object.function返回函数对象,而不调用它
  • 要求一种技术的可能应用有点太宽泛了。但无论如何,这里有一个:list.sort(key=function_name_goes_here).

标签: python function object methods


【解决方案1】:

它返回一个你以后可以使用的函数对象。例如

def myPrint(fun):
    for i in range(5):
        print(fun(i))

def myFactorial(x):
    acc = 1
    for i in range(1,x):
        acc *= i
    return acc

那你就可以了

>>> myPrint(myFactorial)
1
1
2
6
24

或者

>>> myPrint(range)
[]
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]

这允许你创建一个你想在其他上下文中使用的函数(这在 python 中很常见),很多内置函数都这样做,比如mapfilterreduce、@ 987654327@...

如您所见,myObject.myFunction 返回函数本身,而 myObject.myFunction() 实际上“执行”它

【讨论】:

  • 谢谢!我现在试图弄清楚在myPrint(myFactorial) 调用中,myFactorial 如何确定它的参数x 以便打印1 1 2 6 24。它是如何工作的?
  • 是for循环中的i,当它调用print(fun(i))
  • 我明白了,fun() 是在哪里定义的,或者它不是出于某种原因?还是应该是fun[i]
  • fun inside myPrint 是您作为参数传递的任何函数,定义是定义您传递的函数的任何地方:)。如果您将其称为 myPrint(myObject.myFunction),则它是在 myObject 中定义的
【解决方案2】:

是的。 object.method 将方法作为对象返回。

【讨论】:

    【解决方案3】:

    它用于所谓的回调。您可以将函数作为参数传递,并在函数中完成魔术后调用回调。如果你做异步的东西很有用。

    【讨论】:

    • 抱歉,我不确定我是否理解。你能提供一个链接或更简单的解释吗?
    • 嗯,一个例子是你有一个调用 url 的函数,它是异步的。您希望在对 url 的调用完成并得到结果时发生某些事情。在这种情况下,您可以将回调传递给调用 url 的函数。当调用完成时,会从 url 函数调用此回调。不知道现在解释的是否简单一点。你在使用 javascript 吗? JQuery 非常使用回调。
    • 回调并不是唯一的用途。这是该语言的一般特征。
    • @Daenyth 他问了一个你可能需要它的例子。回调就是一个例子。
    猜你喜欢
    • 2011-09-08
    • 2016-04-08
    • 2022-01-21
    • 1970-01-01
    • 2014-11-08
    • 2018-10-13
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多