我有一个C++的背景,并试图学习一些python.
我理解C++的虚函数,遗憾的是我不明白python中后期绑定的含义是什么意思.
链接:https://gist.github.com/deemson/8efabf56d67623ead804
从教程复制面食:
functions = []
for n in [1, 2, 3]:
def func(x):
return n*x
functions.append(func)
# You would expect this to print [2, 4, 6]
print(
'calling a list of bad closures and output is: {}'
.format(str([function(2) for function in functions]))
)
Run Code Online (Sandbox Code Playgroud)
到底发生了什么?当函数附加到列表中时,它具有什么值?有人可以简化这段代码让我理解.
请注意这一点,您可以在运行时创建函数,或多或少像lambdas在 C++ 中一样。所以基本上你正在迭代一个列表,使n取值1,2 and 3
for n in [1, 2, 3]:
def func(x):
return n*x
Run Code Online (Sandbox Code Playgroud)
因此,通过每次迭代,您都在构建一个名为 func 的函数,它接受一个值并将其乘以 n。通过将它附加到函数列表,您将存储这些函数,因此您可以遍历列表以调用函数。
[function(2) for function in functions]
Run Code Online (Sandbox Code Playgroud)
通过这样做,您调用存储有 value 的每个函数2,您会期望它输出[2, 4, 6]([1*2, 2*2, 3*2]),但它返回[6, 6, 6],为什么?,那是因为每个函数都n用于它的计算,所以他们不是真的在做,1*x, 2*x and 3*x而是实际上n*x,因为n上次绑定到3所有正在做的功能,3*2变成6.
使用 python 控制台来正确检查它。
| 归档时间: |
|
| 查看次数: |
3480 次 |
| 最近记录: |