考虑一下Python名称空间的工作原理可能会有所帮助:它们实际上是字典。因此,当您执行此操作时:
from a_package.baz import do_something_expensivedo_something_expensive = lambda: 'Something really cheap.'
这样想:
do_something_expensive = a_package.baz['do_something_expensive']do_something_expensive = lambda: 'Something really cheap.'
希望您能明白为什么它不起作用:-)将名称导入名称空间后, 从中
导入名称空间的名称值就无关紧要了。您仅在本地模块的名称空间或上面的a_package.baz的名称空间中修改do_something_expensive的值。但是因为bar直接导入do_something_expensive,而不是从模块名称空间引用它,所以需要写入其名称空间:
import barbar.do_something_expensive = lambda: 'Something really cheap.'



