理解if __name__ =="__main__"
1. 函数代码
1. #!/usr/bin/python
2. # -*- coding: utf-8 -*-
3. """
4. __name__和__main__含义详解
5.
6. """
7.
8. def square(x):
9. return x * x
10.
print "test: square(42) ==",square(42)
运行结果如下:
test: square(42) == 1764
2. 新建模块文件mymath.py供调用函数
有条理的,可复用的做法,是把对应的square等函数,专门放到一个文件中,然后被别人调用,此时,新建一个模块文件mymath.py,里面有我们实现的函数square:
1. #!/usr/bin/python
2. # -*- coding: utf-8 -*-
3. """
4. __name__和__main__含义详解
5.
6. """
7.
8. def square(x):
9. return x * x
10.
print "test: square(42) ==",square(42)
然后别的python文件main.py中,导入此mymath模块,然后使用其square函数:
1. #!/usr/bin/python
2. # -*- coding: utf-8 -*-
3. """
4. __name__和__main__含义详解
5.
6. """
7.
8. import mymath;
9.
10. print "In caller, test for mymath: square(12)=",mymath.square(12)
然后运行结果是:
1. test: square(42) == 1764
2. In caller, test for mymath: square(12)= 144
此处,我们看到同时出现了原本用于mymath.py中测试square函数的打印结果:
test: square(42) ==1764
作为模块的调用者是不希望看到这样的测试结果的。
我们所希望的是:作为模块mymath.py本身,希望有自己的相关的调试的代码,用于调试自己模块函数,演示如何使用等等代码;但是又不希望在作为模块被调用时不运行相关调试代码,此时,就可以用上述的__main__来实现了。
3. 使用if __name__ == "__main__"
即:表示本文件直接运行(自己是 main)时,以下代码运行
1. #!/usr/bin/python
2. # -*- coding: utf-8 -*-
3.
4. def square(x):
5. return x * x
6.
7. # 表示本文件直接运行(自己是 main)时,以下代码运行
8. if __name__ == "__main__":
9. print "test: square(42) ==",square(42);
此时:
作为mymath.py本身,自己运行时,可以运行到此处的代码,调试,验证自己的函数square执行的是否正确:
test: square(42) == 1764
同时,当mymath.py被main.py调用(import mymath)时,不会看到对应的代码执行的结果了,只看的:
In caller, test **for** mymath: square(12)= 144