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"""

    @classmethod
    def setUp(cls):
        print "test_mathfunc:setUp"
        print "do something before test.Prepare environment."

    @classmethod
    def 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)
print

class Test():
    '''Test the order of procedure'''
    def __init__(self):
        pass
    def 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类


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值