Python 04(basic commands) - QLGQ/learning-python GitHub Wiki

输出语句:print('Hello world!')

模块导入和重载:import & reload

reload 函数希望获得的参数是一个已经加载了的模块对象的名称,所以如果在重载之前 , 请确保已经成功地导入了这个模块。值得注意的是, reload 函数在模块对象的名称前还需要括号, import 则不需要。 reload 是一个被调用的函数,而 import 是一个语句。

这也就是为什么你必须把模块名称传递给 reload 函数作为括号中的参数,并且这也是在重载时得到了额外的一行输出的原因。最后一行输出是 reload 调用后的返回值的打印显示, reload 函数的返回值是一个 Python 模块对象。

你需要记住是何时导入的,才能知道能不能够 reload ,你需要记住当调用 reload 时需要使用括号,并且要记住让代码的最新版本运行时首先要使用 reload 。此外, reload 是不可传递的,重载一个模块的话只会重载该模块,而不能够重载该模块所导入的任何模块,因此,有时候必须 reload 多个文件。

import vs from

from 和 import 很相似,只不过增加了对载入组件的变量名的额外的赋值。从技术上讲, from 复制了模块的属性,以便属性能够成为接收者的直接变量。因此,能够直接以 title (一个变量)引用导入字符串而不是 myfile.title (一个属性)引用。

无论使用的是 import 还是 from 去执行导入操作,模块文件 myfile.py 的语句都会执行,并且导入的组件(对应这里是交互提示模式)在顶层文件 中得到了变量名的读取权。

使用 exec 运行模块文件

exec(open('module.py').read()) exec 调用有着类似于 import 的效果,但是,它从技术上不会导入模块,默认情况下,每次以这种方式调用 exec 的时候,它都重新运行文件,就好像我们把文件粘贴到了调用 exec 的地方。因此, exec 不需要在文件修改后进行模块重载,它忽略了常规的模块导入逻辑。缺点是,由于 exec 的工作机制就好像在调用它的地方粘贴了代码一样,和前面提到的 from 一样,对于当前正在使用的变量有潜在的默认覆盖的可能。例如,我们的 script1.py 赋给了一个名为 x 的变量。如果这个名字已经在 exce 调用的地方使用了,那么这个名称的值将被覆盖。