目录
链接: 转载和参考链接.
链接: 转载和参考链接.
前言
经常在代码中看到
if __name__ =="__main:
执行体
但是又不懂是什么意思?
这里,就出现了,我们此处所要解释的
name__和__main
一、name?
__name__是当前模块的一个属性,属性名称的前后各有两个_修饰,表明它是一个内置属性(也称内置变量)
二、main?
"main"则是一个字符串对象,“xx”,一对双引号是创建字符串对象的快捷方式
三、name=="main"写在一起表示什么?
表示当前模块的__name__属性的值是否等于字符串"main",如果__name__的值是"main"则返回True、如果__name__的值不是"main",则返回False
四、__name__属性的值什么时候等于"main"呢?
如果当前模块是程序的入口模块(也称顶级模块、脚本文件),则当前模块的__name__属性的值是"main"
eg:
1.定义一个python脚本文件,(caculate_salary.py)
2.执行caculate_salary.py内部的语句块
3. 此时该py文件属性__name__是main
# !/usr/bin/python
# -*- coding: utf-8 -*-
class Student:
def yearsalary(self):
print("计算年薪")
def daysalary(self):
print("计算日薪")
a=Student()
a.daysalary()
a.yearsalary()
print(__name__)#打印出当前caculate_salary的属性名
##输出结果###
计算日薪
计算年薪
__main__
五、__name__属性的值不是"main"时,会是什么?
如果当前模块不是程序的入口模块(顶级模块),__name__属性的值是"当前模块名",说明当前模块是被其他模块导入时运行的!
eg: 导入其他模块(import math)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
print(math.__name__)
##########输出结果#########
math
name=="main"用来做什么?
1、做脚本:如果当前模块是程序的入口模块(顶级模块),则是作为程序执行的入口,此时的模块文件作为脚本独立运行
2、做测试:如果当前模块不是入口模块,我们也可以利用模块作为程序的入口特性做测试工作,在 if name == "main"修饰的代码块中调用一些测试代码!
六、总结
1、每个Python模块(.py结尾的Python模块文件)都包含内置变量__name__(也称内置属性)
2、模块作为程序入口执行时,即作为脚本执行时,__name__的值等于"main"
3、模块import到其他模块执行时,__name__的值等于"模块名"(注意:不包含模块文件的后缀.py)
4、模块作为程序入口执行时,即作为脚本执行时,name == 'main’的结果为True,此时在if代码块中的语句可以运行!
5、模块import到其他模块执行时,name == 'main’的结果为False,因为此时__name__的值为模块名称(不含.py),此时在if代码块中的语句并不会执行!
# !/usr/bin/python
# -*- coding: utf-8 -*-
class Student:
def yearsalary(self,salary):
print("计算年薪:",salary*12)
def daysalary(self,salary):
print("计算日薪:",salary/22)
if __name__=="__main__":
print("代码测试中")
a=Student()
a.daysalary(22000)
a.yearsalary(22000)
else:
print("导入到其他文件中")
import moduleB2
####运行结果####
导入到其他文件中