这样定义函数对吗?
def f1():def sum1(x, y):
return x + y
return sum1()
如果没有错误的话,应如何才能访问内部函数呢? 要访问内部函数,可以通过在外部函数中返回内部函数的引用,并将其存储在变量中。然后可以使用该变量来调用内部函数。例如:
def f1():
def sum1(x, y):
return x + y
return sum1
add = f1()
print(add(2, 3)) # 输出 5
请注意,返回的是 sum1 函数本身而不是其结果,因此在调用时不需要使用括号。
这样定义函数是合法的,但是在调用 f1() 时会返回一个错误,因为 sum1() 函数需要两个参数 x 和 y ,但是在 f1() 中并没有传入这两个参数。
要访问内部函数 sum1() ,可以将其作为返回值返回。例如:
def f1():
def sum1(x, y):
return x + y
return sum1
# 调用f1()返回sum1函数
result = f1()
# 使用返回的函数计算2+3
print(result(2, 3)) # 输出 5
在这个例子中,我们将 sum1 函数作为返回值返回,并将其赋值给 result 变量。然后,我们可以使用 result 变量来调用 sum1 函数,并传入两个参数 2 和 3 ,得到结果 5 。 看到上面两位大神的解答,那就是说必须去掉return sum1()末尾的括号(),即改成return sum1
也就是代码必须改为:
def f1():
def sum1(x, y):
return x + y
return sum1
修改后,访问内部函数sum1()有下面两种方法:
方法1:
上面两位大神介绍的
方法2:
>>> f1()(7, 9)
16 要访问内部函数`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()`。 本帖最后由 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) lzb1001 发表于 2023-5-21 00:12
def f1():
def sum1(x, y):
return x + y
这玩意有那么难吗
3、result = f1()
为什么像上面这样赋值后,就可以像下面这样向内部函数sum1()传入参数呢?
result(3, 5)
f1返回的是函数地址,想要使用它就需要添加括号,添加参数 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)`。
页:
[1]