我有一个C ++的背景,并试图学习一些python。
惠斯特我理解C ++的虚函数,遗憾的是我不明白python中后期绑定绑定意味着什么。
链接:Xamarin.UITest 1.3.6.1476-dev
教程中的复制意大利面:
/some/real/location
这到底发生了什么?当函数附加到列表中时,它具有什么值?有人可以简化这段代码让我理解。
答案 0 :(得分:3)
请注意,您可以在运行时创建函数,或多或少像c ++中的lambdas
。所以基本上你是在迭代一个列表,让n
取值1,2 and 3
for n in [1, 2, 3]:
def func(x):
return n*x
所以,通过每次迭代,你构建一个名为func的函数,取一个值并将它乘以n。通过将其附加到函数列表,您将存储此函数,因此您可以遍历列表以调用函数。
[function(2) for function in functions]
通过执行此操作,您可以调用存储为值2
的每个函数,您希望这会输出[2, 4, 6]
([1 * 2,2 * 2,3 * 2]),但是相反,它会返回[6, 6, 6]
,为什么?这就是因为每个函数都使用n
进行计算,因此它们实际上并不是1*x, 2*x and 3*x
而是实际n*x
以及n
} {} {}} {}} {}}
使用python控制台进行正确检查。
答案 1 :(得分:0)
在C ++语言中,指向该函数的指针是附加到列表中的内容。在for
循环后,functions
包含指向三个不同函数(func(x) = n * x
,func(x) = n * x
和func(x) = n * x
)的指针。注意对n的依赖性。随着n的变化,这些函数的行为也会发生变化,它们都是等价的。
在代码的第二部分中,从列表中提取指针,并使用2
参数评估三个函数中的每一个。
这是另一个澄清的例子。想象一下,我们这样做:
>>> functions
[<function func at 0x0239AA70>, <function func at 0x0239AAB0>, <function func at 0x0239AB30>]
>>> g = functions[2]
>>> g
<function func at 0x0239AB30>
>>> g(10)
20
>>> g(100)
200
我们在第一行中看到的是函数包含指向三个不同函数的指针。下一行从列表中引出第三个指针(引用func(x) = n * x
)并将其分配给g。实际上,我们已经通过此调用定义了一个函数g(x) = n * x
。我们现在可以用参数评估g
。
请注意,由于所有功能都取决于n
,因此您可以更改n
,并且行为会发生变化。
>>> n = 100
>>> g(10)
1000