鱼C论坛

 找回密码
 立即注册
查看: 1962|回复: 3

[已解决]为啥函数后有两个括号

[复制链接]
发表于 2023-7-19 13:44:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> 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()就能运行
最佳答案
2023-7-19 13:44:26
函数 funx 是一个闭包函数,其返回的是一个函数对象(即内部定义的 funy 函数)。当我们调用 funx() 时,返回的是一个函数对象,而不是一个具体的值。因此,我们需要再次使用 () 来调用这个返回的函数对象,即 funx()() 。这就是为什么 funx 需要两个括号来调用。

而对于 funz 函数,它直接返回的是一个具体的值(即打印出来的"hello"),而不是一个函数对象。所以,我们只需要使用一个括号来调用 funz ,即 funz() 。

总的来说,是否需要使用两个括号来调用一个函数,取决于这个函数的返回值是一个函数对象还是一个具体的值。如果返回的是一个函数对象,那么我们就需要使用两个括号来调用;如果返回的是一个具体的值,那么我们只需要使用一个括号来调用。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-19 13:44:25 | 显示全部楼层
在Python中,函数后面的两个括号[url=]b[/url][/b]表示函数的调用操作。当我们调用一个函数时,我们需要在函数名后面加上括号,并可以传递参数给该函数。如果函数没有参数,仍然需要使用括号进行调用。

在你提供的代码示例中,funx()表示调用函数funx,而funx()()则表示在函数funx的返回值上再次调用函数。让我们逐步解释这些代码的执行过程:

首先,调用funx()时,执行了funx函数的定义部分。在函数内部,定义了局部变量x和内嵌函数funy。接着,函数funx返回了funy函数对象。

然后,第二对括号[url=]b[/url][/b]应用在funx()的返回值上,也就是funy函数。所以,此时我们实际上是在调用funy函数。在funy函数内部,使用关键字nonlocal声明了变量x是来自于funx函数的外部变量x,并对其进行了自增操作。最后,返回了变量x的值。

因此,funx()()的运行结果是6,因为在funy函数内部,变量x的初始值为5,经过自增操作后变为6,然后作为funy函数的返回值被返回。

而对于funz(),因为funz函数定义中没有返回值,所以函数的执行结果是None。我们只需要调用funz()一次即可运行函数,不需要再次使用括号。

总结起来,当我们希望链式调用多个函数时,需要在每个函数后面加上一对括号[url=]b[/url];而对于单个函数的调用,只需要在函数名后面加上一对括号[b[/b]即可。

希望以上解释对您有所帮助!如果您还有其他问题,请随时提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 13:44:26 | 显示全部楼层    本楼为最佳答案   
函数 funx 是一个闭包函数,其返回的是一个函数对象(即内部定义的 funy 函数)。当我们调用 funx() 时,返回的是一个函数对象,而不是一个具体的值。因此,我们需要再次使用 () 来调用这个返回的函数对象,即 funx()() 。这就是为什么 funx 需要两个括号来调用。

而对于 funz 函数,它直接返回的是一个具体的值(即打印出来的"hello"),而不是一个函数对象。所以,我们只需要使用一个括号来调用 funz ,即 funz() 。

总的来说,是否需要使用两个括号来调用一个函数,取决于这个函数的返回值是一个函数对象还是一个具体的值。如果返回的是一个函数对象,那么我们就需要使用两个括号来调用;如果返回的是一个具体的值,那么我们只需要使用一个括号来调用。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-19 13:48:01 | 显示全部楼层
isdkz 发表于 2023-7-19 13:44
函数 funx 是一个闭包函数,其返回的是一个函数对象(即内部定义的 funy 函数)。当我们调用 funx() 时,返 ...

啊  原来如此
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 05:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表