为啥函数后有两个括号
>>> def funx():... x=5
... def funy():
... nonlocal x
... x=x+1
... return x
... return funy
...
>>> funx()
<function funx.<locals>.funy at 0x0000022527668160>
>>> funx()()
6
>>> def funz():
... print('hello')
...
>>> funz()
hello
为啥funx()()这样才会运行函数,funz函数只要funz()就能运行 在Python中,函数后面的两个括号b表示函数的调用操作。当我们调用一个函数时,我们需要在函数名后面加上括号,并可以传递参数给该函数。如果函数没有参数,仍然需要使用括号进行调用。
在你提供的代码示例中,funx()表示调用函数funx,而funx()()则表示在函数funx的返回值上再次调用函数。让我们逐步解释这些代码的执行过程:
首先,调用funx()时,执行了funx函数的定义部分。在函数内部,定义了局部变量x和内嵌函数funy。接着,函数funx返回了funy函数对象。
然后,第二对括号b应用在funx()的返回值上,也就是funy函数。所以,此时我们实际上是在调用funy函数。在funy函数内部,使用关键字nonlocal声明了变量x是来自于funx函数的外部变量x,并对其进行了自增操作。最后,返回了变量x的值。
因此,funx()()的运行结果是6,因为在funy函数内部,变量x的初始值为5,经过自增操作后变为6,然后作为funy函数的返回值被返回。
而对于funz(),因为funz函数定义中没有返回值,所以函数的执行结果是None。我们只需要调用funz()一次即可运行函数,不需要再次使用括号。
总结起来,当我们希望链式调用多个函数时,需要在每个函数后面加上一对括号b/b];而对于单个函数的调用,只需要在函数名后面加上一对括号即可。
希望以上解释对您有所帮助!如果您还有其他问题,请随时提问。 函数 funx 是一个闭包函数,其返回的是一个函数对象(即内部定义的 funy 函数)。当我们调用 funx() 时,返回的是一个函数对象,而不是一个具体的值。因此,我们需要再次使用 () 来调用这个返回的函数对象,即 funx()() 。这就是为什么 funx 需要两个括号来调用。
而对于 funz 函数,它直接返回的是一个具体的值(即打印出来的"hello"),而不是一个函数对象。所以,我们只需要使用一个括号来调用 funz ,即 funz() 。
总的来说,是否需要使用两个括号来调用一个函数,取决于这个函数的返回值是一个函数对象还是一个具体的值。如果返回的是一个函数对象,那么我们就需要使用两个括号来调用;如果返回的是一个具体的值,那么我们只需要使用一个括号来调用。 isdkz 发表于 2023-7-19 13:44
函数 funx 是一个闭包函数,其返回的是一个函数对象(即内部定义的 funy 函数)。当我们调用 funx() 时,返 ...
啊原来如此
页:
[1]