tengke 发表于 2023-4-28 10:48:39

函数问题

def a(a1):
    def b(b1):
      return b1 ** a1
    returnb

ab= a(2)
ba= a(3)
ss=ba(2)
print(ss)


return b1 ** a1 是怎么做到让数字的平方进行相乘的呢
a= 3
ss = a ** a
print(ss)
这个我明白但是函数是怎么做到 b1和a1两个变量 的值是一致的

isdkz 发表于 2023-4-28 10:48:40

这个问题是关于Python闭包的,让我们一步一步来解释这段代码。

在这段代码中,有一个外部函数`a(a1)`和一个内部函数`b(b1)`。当调用`a(a1)`时,它返回一个函数`b`,并在内部函数`b`中保存了`a1`的值。这种特性被称为闭包。

1. 首先,你调用`ab = a(2)`。这里,`a1`的值是2。这将返回一个函数`b`,其内部`a1`的值为2。所以,`ab`现在是一个`b`函数,其`a1`值为2。
2. 然后,你调用`ba = a(3)`。这里,`a1`的值是3。这将返回一个函数`b`,其内部`a1`的值为3。所以,`ba`现在是一个`b`函数,其`a1`值为3。
3. 接下来,你调用`ss = ba(2)`。这里,`ba`函数的内部`a1`值为3,所以`b1`的值是2。计算`b1 ** a1`即为`2 ** 3`,结果为8。因此,`ss`的值为8。

关于你的疑问,`b1`和`a1`的值并不需要保持一致。这两个变量是独立的。`a1`的值取决于你调用`a(a1)`时传递的参数,而`b1`的值取决于你调用`b(b1)`时传递的参数。在这个例子中,`a1`和`b1`只是恰巧都是2。实际上,你可以用不同的值来调用这两个函数。例如,你可以这样调用:

ab = a(3)
result = ab(4)


这里,`a1`的值是3,`b1`的值是4,所以`result`的值为`4 ** 3`,即64。
页: [1]
查看完整版本: 函数问题