|
|
发表于 2023-6-9 10:20:14
|
显示全部楼层
1、你的注释基本上是准确的。 make_repeat(n) 确实返回了一个新的lambda函数,这个函数接受一个参数 s ,然后返回 s 的 n 倍。然后你把这个新的函数赋给了 double ,所以当你调用 double(8) 或 double('FishC') 时,你实际上是在调用那个lambda函数,参数 n 已经固定为2了。
2、 double 确实可以被理解为这个特定lambda函数的别名。然而,内存地址的变化可能是因为Python的内存管理机制。当你打印函数对象时,Python会显示该对象的内存地址。然而,这个内存地址不一定始终不变,特别是在像Python这样的高级语言中,它有自己的内存管理和垃圾回收机制。
在你的代码中,每次调用 make_repeat(n) 都会返回一个新的lambda函数,这个新的函数可能会在不同的内存位置。并且即使你给它赋了一个变量名(如 double ),这个函数的内存位置也可能随着时间和环境的变化而变化。
实际上,对大部分Python开发者来说,函数或其他对象的确切内存位置并不重要,因为Python自己会处理所有的内存管理问题。你只需要知道 double 是一个指向特定函数的引用,而不需要关心这个函数在内存中的确切位置。 |
|