当前位置: 首页 > 面试题库 >

不带括号的调用函数的目的python

司徒兴思
2023-03-14
问题内容

考虑以下:

class objectTest():

    def __init__(self, a):
        self.value = a

    def get_value(self):
        return self.value

class execute():

    def __init__(self):
        a = objectTest(1)
        b = objectTest(1)

        print(a == b)
        print(a.get_value() == b.get_value)
        print(a.get_value() == b.get_value())
        print(a.get_value == b.get_value)

if __name__ == '__main__':
    execute = execute()

此代码返回

>>>
False
False
True 
False

鉴于get_value是一个函数,我希望执行停止并返回错误,但事实并非如此。有人可以解释为什么python解释器允许这种语法而不是引发属性错误,在我看来,这可以节省我宝贵的时间。


问题答案:

如前所述,函数和方法是一流的对象。您通过在末尾加上一些括号(括号)来 称呼
它们。但是看来您想要更多的动机来解释为什么python甚至允许我们这样做。我们为什么要关心函数是否一流?

有时您不想调用它们,而是想传递对可调用对象本身的引用。

from multiprocessing import Process
t = Process(target=my_long_running_function)

如果在上述内容后面加上方括号,它将my_long_running_function在主线程中运行;几乎没有你想要的!您想Process引用可调用对象,它将在新进程中运行。

有时您只想指定可调用对象,然后再做其他事情…

def do_something(s):
    return s[::-1].upper()

map(do_something,['hey','what up','yo'])
Out[3]: ['YEH', 'PU TAHW', 'OY']

map在这种情况下)填写其参数。

也许您只想将一堆可调用对象放入某个集合中,并以动态方式获取您想要的那些。

from operator import *

str_ops = {'<':lt,'>':gt,'==':eq} # etc
op = str_ops.get(my_operator)
if op:
    result = op(lhs,rhs)

以上是将运算符的字符串表示形式映射到其实际动作的一种方法。



 类似资料:
  • 问题内容: 今天有人告诉我,可以不带括号地调用一个函数。我能想到的唯一方法是使用类似或的函数。 但是,这些都需要加上括号,然后放在第一个平方上。我还考虑了将函数传递给某种事件处理程序的想法,例如: 但是,问题就变成了“如何在没有括号的情况下调用?” 那么这个谜题的解决方案是什么?如何在不使用括号的情况下调用Javascript函数? 问题答案: 有多种不带括号的函数调用方法。 假设您已定义此函数:

  • 今天有人告诉我,可以调用没有括号的函数。我能想到的唯一方法是使用像或这样的函数。 但这些要求在和上加上括号,让我们处于第一步。我还考虑了将函数传递给某种事件处理程序的想法,例如: 但是问题变成了“如何在没有括号的情况下调用?” 那么这个谜的答案是什么呢?如何在Javascript中调用函数而不使用括号?

  • 本文向大家介绍基于js里调用函数时,函数名带括号和不带括号的区别,包括了基于js里调用函数时,函数名带括号和不带括号的区别的使用技巧和注意事项,需要的朋友参考一下 示例代码: 如以上代码: aaa 是将 hi() 的运行结果赋值给它,即 return 返回的匿名函数,此时有一个闭包,则每次调用 aaa 时都访问的同一个 a,aaa() 第一次运行结果为 1,第二次为2 而 bbb 将是将 hi 这

  • 问题内容: 我注意到,如果使用许多不带括号的DataFrame函数,其行为似乎类似于“属性”,例如 这是如何完成的,是一种好的做法?这是Linux上的熊猫0.15.1 问题答案: 它们是不同的,因此不建议使用,它们清楚地表明这是一种方法并且恰好输出结果,而另一种则表明了预期的输出。 这就是为什么您不应该这样做的原因: 所以好吧,您没有使用括号正确地调用该方法并看到显示为有效的输出,但是如果您引用了

  • 对于在C 11中调用模板函数需要什么,我有点困惑,在C 11中为模板参数提供默认值。 例如,假设我有以下模板化函数 我想在代码中的某个地方调用它。所有这些电话都有效吗? 它可以很好地编译GCC 4.7.2,但我不确定它是否完全正确。我猜我的不确定性可能来自要求使用空尖括号

  • 问题内容: 我一直在寻找过滤器在Angularjs中的工作方式,我看到我们需要发送2套括号。 它是什么意思,以及我们如何使用JavaScript处理它? 问题答案: 这意味着第一个函数()返回另一个函数,然后立即调用该返回的函数。例如: