欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

python中__name == '__main__'

发布时间:2025/3/20 python 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 python中__name == '__main__' 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

这里对于执行顺序一定要注意,大多数地方对于main()的执行都是说,这里更多的适用于测试,如果模块被调用,因为此时的__name__为模块的名字,则不会这行,如果作为一个单独的“程序”则执行,总结如下。

对于  if __name__ == '__main__': 的解释相关博客已经给出了说明,意思就是

       1、当此文件当做模块被调用时,不会从这里执行,因为此时name属性就成了模块的名字,而不是main。 当此文件当做单独执行的程序运行时,就会从main开始执行。但是发现,前边有类的声明的时候,函数时如何执行的?

      2 、对于带有类的程序,会先执行类及类内函数,或者其他类外函数。这里可以总结为,对于没有缩进的程序段,按照顺序执行。然后,才到main函数。然后才按照main内函数的执行顺序执行。如果main内对类进行了实例化,那么执行到此处时,只会对类内成员进行初始化,然后再返回到main 函数中。 执行其他实例化之后对象的成员函数调用。

对于1用一个实例进行解读,定义一个mathfunc.py:

'''mathfunc.py-function defination''' def add(a, b):return a+b print "mathfunc:1+3 = ",(1+3)if __name__ == "__main__":print "mathfunc:add(a,b) = ",add(12,5)

运行并输出:


现在调用模块 mathfunc.py 的test_mathfunc.py的模块

# -*- coding: utf-8 -*-import unittest from mathfunc import *print "test_mathfunc:a(3)+b(4)= ",(3+4) class TestMathFunc(unittest.TestCase):"""Test mathfuc.py"""@classmethoddef setUp(cls):print "test_mathfunc:setUp"print "do something before test.Prepare environment."@classmethoddef tearDown(cls):print "do something after test.Clean up."def test_add(self):"""Test method add(a, b)"""print "test_mathfunc:test_add"self.assertEqual(3, add(1, 2))self.assertNotEqual(3, add(2, 2))print "test_mathfunc:a(5)+b(6)= ",(5+6) printclass Test():'''Test the order of procedure'''def __init__(self):passdef add(self,a,b):return ( a + b )if __name__ == "__main__":test = Test()print "test_mathfunc:",test.add(7,8)

不同于c/c++有统一的程序入口函数main(),而Python则不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。

一个Python源码文件(.py)除了可以被直接运行外,还可以作为模块(也就是库),被其他.py文件导入。不管是直接运行还是被导入,.py文件的最顶层代码都会被运行(Python用缩进来区分代码层次),而当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行。       

因为Python是解释型的语言,按照“顺序”执行,执行顺序依次是导入模块(import mathfunc)中的未缩进的程序段,这里即是 mathfunc.py中的print语句,接着是本模块中未缩进的程序段,接着是派生的unittest.Testcase类


总结

以上是生活随笔为你收集整理的python中__name == '__main__'的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。