当用.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结果打印如下:
。
可见,导入模块重命名会减少代码长度,减轻程序编写工作量,别无它用。
练习题:输入本课的测试自行测试一次。