查询Python中的命名

当我说,

>>>radius = 2

在内部,在__main__模块的全局框架中创建一个名为radius的新对象,该对象的类为int.引用变量也由名称半径创建,该半径指向该对象.

当我说,

>>>from math import sqrt

在内部,在__main__模块的全局框架中创建一个名为sqrt的新对象,该对象属于类函数.引用变量也是由名称sqrt创建的,它指向函数类型的对象.

当我说,

>>>def square(x):
         return mul(x,x)

在内部,在__main__模块的全局框架中创建一个名为square的新对象,该对象是类函数.引用变量也是由名称方形创建的,它指向函数类型的对象.

我的问题:

我的理解是否正确?

要么

radius和sqrt和square对象是在__main__模块的全局框架和参考变量(半径sqrt square)之外创建的,它们位于__main__模块的全局框架点内吗?

在CS61A 2012秋季课程中,老师说,这就是它,它看起来像隐藏了python程序内存模型的许多细节.

最佳答案 询问创建对象的位置与引用所在的位置有点没有实际意义.正如200 OK指出的那样,所有对象名称都是引用 – 没有一个名称比其他名称更规范或本地.对象只是存在(在私有堆上,虽然这对于所有意图和目的都无关紧要),并且名称指向它们.

也就是说,你的问题中有一个不太恰当的细微差别.从模块导入内容时 – 无论是整个模块本身,还是只是一个函数 – 对该模块的引用都存储在sys.modules dict中.这确保了当代码的另一部分从该模块导入时,它不会被重新导入;使用现有的导入版本.

点赞