强基初中数学&学Python——第三十课 模块

    当用.py文件来保存python代码时,这个文件就是python的模块了。例如下面的helloworld模块(约定俗成,模块名称全是小写英文字母。):

直接运行这个模块打印如下:

    一个模块(.py文件)通过import语句使用别的模块(.py文件)。例如新建一个welcome模块导入helloworld模块:

运行结果打印:

    从上面的打印结果可以得到:当模块直接运行时,模块名称变量(__name__)的值是“__main__”;当模块间接运行时是模块的名称(无.py)。

    另外,从打印结果中,得知导入模块(import module)时,被导入的模块的直接执行语句就马上执行了,这是不想要的。就是说,当模块直接运行时才运行这些语句,不是直接运行时就不执行,怎么办呢?

    这就要利用模块名称(__name__)不同运行模式值不同来达到了。修改helloworld模块如下:

直接运行结果打印:

现在来运行welcome.py结果打印如下:

成功了!虽然代码看起来有点别扭。

    如果模块是间接运行的,但又要写一些测试代码,就要用这种“别扭的代码”了!

    被导入的模块中有类,类中有直接执行代码会怎样呢?测试一下,把helloworld模块改为:

直接运行结果打印:

welcome.py改为:

运行welcome.py结果打印如下:

显然,开头还是出现不想要的"helloworld”。仿造模块的修改方法修改类Test:

直接运行这个模块打印如下:

现在来运行welcome.py结果打印如下:

成功了。

    类中除了属性和方法外,如果放可执行代码,在类被加载时就运行,所以一般情况类中不放直接执行代码。当某些类需要编写测试代码时,就不要把这个类放在直接执行模块中(例如上例的welcome.py文件),然后用模块名称开关(if __name__ == "__main__":)控制直接运行时才运行测试程序。

    导入的模块可以用关键字“as”重命名的,下面用重命名修改welcome.py:

运行welcome.py结果打印如下:

可见,导入模块重命名会减少代码长度,减轻程序编写工作量,别无它用。

练习题:输入本课的测试自行测试一次。