鱼C论坛

 找回密码
 立即注册
查看: 2096|回复: 7

[已解决]这样定义函数对吗?

[复制链接]
发表于 2023-5-20 22:15:56 | 显示全部楼层 |阅读模式

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

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

x
def f1():
        def sum1(x, y):
                return x + y
        return sum1()


如果没有错误的话,应如何才能访问内部函数呢?
最佳答案
2023-5-21 13:58:58
lzb1001 发表于 2023-5-21 00:12
def f1():
        def sum1(x, y):
                return x + y

1. 正确,这个外部函数没有定义参数。

2. 抱歉,我的回复可能有点不清楚。在这种情况下,`f1()` 返回了一个指向内部函数 `sum1` 的引用。当你调用 `result = f1()` 时,`result` 被设置为指向到 `sum1()`,这意味着 `result` 现在是一个可用于调用 `sum1()` 的函数。因此,`result(3, 5)` 实际上调用了 `sum1(3, 5)` 并返回其计算结果,即8。

3. 当你调用 `f1()` 函数时,它将返回指向 `sum1` 函数的引用。因此,将 `result = f1()` 分配给一个新的变量 `result`,这等效于将 `result` 设置为指向内部函数 `sum1()` 的引用。从那时起,你可以使用 `result` 去调用 `sum1()` 方法,并向其中传递参数,就像这样: `result(3, 5)`。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-20 22:16:37 | 显示全部楼层
要访问内部函数,可以通过在外部函数中返回内部函数的引用,并将其存储在变量中。然后可以使用该变量来调用内部函数。例如:
def f1():
    def sum1(x, y):
        return x + y
    return sum1

add = f1()
print(add(2, 3)) # 输出 5
请注意,返回的是 sum1 函数本身而不是其结果,因此在调用时不需要使用括号。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 22:16:52 | 显示全部楼层
这样定义函数是合法的,但是在调用 f1() 时会返回一个错误,因为 sum1() 函数需要两个参数 x 和 y ,但是在 f1() 中并没有传入这两个参数。

要访问内部函数 sum1() ,可以将其作为返回值返回。例如:
def f1():    def sum1(x, y):        return x + y    return sum1# 调用f1()返回sum1函数result = f1()# 使用返回的函数计算2+3print(result(2, 3)) # 输出 5
在这个例子中,我们将 sum1 函数作为返回值返回,并将其赋值给 result 变量。然后,我们可以使用 result 变量来调用 sum1 函数,并传入两个参数 2 和 3 ,得到结果 5 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-20 22:26:16 | 显示全部楼层
看到上面两位大神的解答,那就是说必须去掉return sum1()末尾的括号(),即改成return sum1

也就是代码必须改为:

def f1():
        def sum1(x, y):
                return x + y
        return sum1

修改后,访问内部函数sum1()有下面两种方法:

方法1:

上面两位大神介绍的

方法2:

>>> f1()(7, 9)
16
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 22:35:45 | 显示全部楼层
要访问内部函数`sum1()`,需要通过调用外部函数`f1()`并传递参数 `x` 和 `y`。

在当前的代码中,`f1()` 返回内部函数 `sum1()` 的值,但它被调用时并没有任何参数传递给它, 所以调用 `f1()` 不会产生有意义的输出。

如果要访问并执行 `sum1()` 函数,可以按照以下方式更改代码:
def f1():
    def sum1(x, y):
        return x + y
    return sum1  # 注意这里不要加括号

result = f1()  # 调用外部函数,并将其返回值赋值给 result 变量
print(result(3, 5))  # 访问内部函数 sum1,并传递参数 x=3, y=5

输出:
8
以上代码中,我们将 `sum1()` 函数对象本身作为 `f1()` 函数的返回值返回,而非将其执行结果返回。这样,我们可以将 `result` 变量声明为 `f1()` 的返回值,然后再调用 `result()` 访问内部函数 `sum1()`。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-21 00:12:48 | 显示全部楼层
本帖最后由 lzb1001 于 2023-5-21 00:20 编辑
sfqxx 发表于 2023-5-20 22:35
要访问内部函数`sum1()`,需要通过调用外部函数`f1()`并传递参数 `x` 和 `y`。

在当前的代码中,`f1()` ...




def f1():
        def sum1(x, y):
                return x + y
        return sum1 # 注意这里不要加括号




我没看懂或不理解的是:

1、外部函数f1()在定义时没有参数,所以调用它时也无法传入参数。----我这样表述对吗?

2、……而非将其执行结果返回(节选自你的回复):我想问的是最后打印输出的结果8不就是内部函数sum1()的执行结果吗?

3、result = f1()

为什么像上面这样赋值后,就可以像下面这样向内部函数sum1()传入参数呢?

result(3, 5)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-21 06:05:49 From FishC Mobile | 显示全部楼层
lzb1001 发表于 2023-5-21 00:12
def f1():
        def sum1(x, y):
                return x + y

这玩意有那么难吗

3、result = f1()

为什么像上面这样赋值后,就可以像下面这样向内部函数sum1()传入参数呢?

result(3, 5)

f1返回的是函数地址,想要使用它就需要添加括号,添加参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-21 13:58:58 | 显示全部楼层    本楼为最佳答案   
lzb1001 发表于 2023-5-21 00:12
def f1():
        def sum1(x, y):
                return x + y

1. 正确,这个外部函数没有定义参数。

2. 抱歉,我的回复可能有点不清楚。在这种情况下,`f1()` 返回了一个指向内部函数 `sum1` 的引用。当你调用 `result = f1()` 时,`result` 被设置为指向到 `sum1()`,这意味着 `result` 现在是一个可用于调用 `sum1()` 的函数。因此,`result(3, 5)` 实际上调用了 `sum1(3, 5)` 并返回其计算结果,即8。

3. 当你调用 `f1()` 函数时,它将返回指向 `sum1` 函数的引用。因此,将 `result = f1()` 分配给一个新的变量 `result`,这等效于将 `result` 设置为指向内部函数 `sum1()` 的引用。从那时起,你可以使用 `result` 去调用 `sum1()` 方法,并向其中传递参数,就像这样: `result(3, 5)`。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 12:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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