python
if __name__ == '__main__' 如何正确理解?
一、if __name__ == '__main__' 如何正确理解?
Python中“if __name__=='__main__':”的详细解答。
__name__是魔法函数的一种,如果大家想详细了解和魔法函数相关的知识点击这里,里面整理了Python中常见的魔法函数用法,都有详细的代码解析:初识CV:Python:实例讲解Python中的魔法函数(高级语法)
引言
学过Java、C、C++的程序员应该都知道,每次开启一个程序,都必须写一个主函数作为程序的入口,也就是我们常说的main函数。如下所示, main()就是Java中的一个main函数。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
与Java、C、C++等几种语言不同的是,Python是一种解释型脚本语言,在执行之前不同要将所有代码先编译成中间代码,Python程序运行时是从模块顶行开始,逐行进行翻译执行,所以,最顶层(没有被缩进)的代码都会被执行,所以Python中并不需要一个统一的main()作为程序的入口。在某种意义上讲,“if __name__==’__main__:”也像是一个标志,象征着Java等语言中的程序主入口,告诉其他程序员,代码入口在此——这是“if __name__==’__main__:”这条代码的意义之一。
1. __name__的理解
1.1 为什么使用__name__属性?
Python解释器在导入模块时,会将模块中没有缩进的代码全部执行一遍(模块就是一个独立的Python文件)。开发人员通常会在模块下方增加一些测试代码,为了避免这些测试代码在模块被导入后执行,可以利用__name__属性。
1.2 __name__属性。
__name__属性是Python的一个内置属性,记录了一个字符串。
- 若是在当前文件,__name__ 是__main__。
- 在hello文件中打印本文件的__name__属性值,显示的是__main__
- 若是导入的文件,__name__是模块名。
- test文件导入hello模块,在test文件中打印出hello模块的__name__属性值,显示的是hello模块的模块名。
因此__name__ == '__main__' 就表示在当前文件中,可以在if __name__ == '__main__':条件下写入测试代码,如此可以避免测试代码在模块被导入后执行。
2. 模块导入
我们知道,当我们把模块A中的代码在模块B中进行import A时,只要B模块代码运行到该import语句,模块A的代码会被执行。
模块A:
# 模块A
a = 100
print('你好,我是模块A……')
print(a)
模块B:
# 模块B
from package01 import A
b = 200
print('你好,我是模块B……')
print(b)
运行模块B时,输出结果如下:
你好,我是模块A……
100
你好,我是模块B……
200
如果在模块A中,我们有部分的代码不想在被导入到B时直接被运行,但在直接运行A时可直接运行,那该怎么做呢?那就可以用到“if __name__==’__main__:”这行代码了,我们队上面用到的A模块代码进行修改:
A模块代码修改为:
# 模块A
a = 100
print('你好,我是模块A……')
if __name__=='__main__':
print(a)
B模块不做修改,直接执行B模块,输出结果如下:
你好,我是模块A……
你好,我是模块B……
200
看到了吗,A模块中的a的值就没有再被输出了。所以,当你要导入某个模块,但又不想改模块的部分代码被直接执行,那就可以这一部分代码放在“if __name__=='__main__':”内部。
3. “__name__”与“__main__”
看到现在也许心中还是疑惑,那么现在我们来说一说“if__name__=='__main__':”的原理。
“__name__”是Python的内置变量,用于指代当前模块。我们修改上面用到的A模块和B模块,在模块中分别输出模块的名称:
模块A:
# 模块A
print('你好,我是模块A……')
print('模块A中__name__的值:{}'.format(__name__))
print('-------------------------')
模块B:
# 模块B
from package01 import A
print('你好,我是模块B……')
print('模块B中__name__的值:{}'.format(__name__))
执行A模块时,输出结果:
你好,我是模块A……
模块A中__name__的值:__main__
-------------------------
执行B模块时,输出结果:
你好,我是模块A……
模块A中__name__的值:package01.A
-------------------------
你好,我是模块B……
模块B中__name__的值:__main__
发现神奇之处了吗?当哪个模块被直接执行时,该模块“__name__”的值就是“__main__”,当被导入另一模块时,“__name__”的值就是模块的真实名称。用一个类比来解释一下:记得小时候要轮流打算教室,轮到自己的时候(模块被直接执行的时候),我们会说今天是“我”(__main__)值日,称呼其他人时,我们就会直接喊他们的名字。所以,“__main__”就相当于当事人,或者说第一人称的“我”。
所以,当运行“if __name__=='__main__':”语句时,如果当前模块时被直接执行,__name__的值就是__main__,条件判断的结果为True,“if __name__=='__main__':”下面的代码块就会被执行。
如果大家对图像分类和检测(Python版)感兴趣的点击下面:
初识CV:目标检测比赛中的tricks(已更新更多代码解析)初识CV:图像分类比赛tricks:“观云识天”人机对抗大赛:机器图像算法赛道-天气识别—百万奖金初识CV:图像分类比赛tricks:华为云人工智能大赛·垃圾分类挑战杯[1][2]
二、in the main street 和 on the main street?
in the street和on the street的区别为:意思不同、用法不同、侧重点不同。 一、意思不同 1.in the street意思:在街道里。 例句: A man had accosted me in the street. 一个男的在街上和我搭讪。 2.on the street意思:在街上的任意一点。 例句: I met her by chance on the street. 我恰巧在街上遇到了她。 二、用法不同 1.in the street用法:in表示在某范围之内,是其中的一部分,表地点时,指在某一立体空间范围内。 2.on the street用法:on表示在某范围之外,两者之间一般互相连接,表地点时,指某物与另一物表面相接触,或与某地方接壤等。 三、侧重点不同 1.in the street侧重点:in the street的意思是在马路上,是指在这条街的区域范围内。 2.on the street侧重点:on the street的意思是在马路边,指在这条街的路面上。
三、name?
Name意思是名字。 英语单词name有多种词性,意为名字的意思,西方国家的人的名字是由三个名字构成的。在漫画中的NAME俗称分镜大纲,是掌握漫画整体节奏的重要步骤。 Name单词词性:
1、名词:名字, 名称, 姓名。 名词同义词:title名字、label名字、tag名字、appellation名字。
2、动词:命名, 提名, 叫出, 指定。 动词同义词:nominate命名、identify命名。
3、形容词:姓名的, 据以取名的。
四、a name of和the name of的区别?
the 那个,这个(指定一个)
a 一个 (不指定)
两者的区别可以从例句看到
I will buy the house 我会买那间房子
I will buy a house 我会买一间房子(虽然可能是同一间房子,但说者没这么指出)
下面是 the 和 a 加 of 的例句:
I bought the book of poetry 我买了那本诗歌之书
I bought a book of poetry 我买了一本诗歌之书
希望帮到了你。
五、business name trade name 区别?
Business name和trade name都是商业名字的意思,两者区别在于:1. Business name指公司的法定名称,是为了在公司注册、政府文件和纳税等方面使用而设定的正式名字;2. Trade name指公司在市场推广产品或服务时使用的名称,是一个商标或品牌的名称,可以与公司的法定名称不同。3. 因此,Business name是法律上规定的必须使用的名称,而trade name是公司自己选择的营销用品牌名称。
六、it main 和void main的区别?
int main是需要有返回值的且为int类型。而void main是没有返回值的。
七、int main()和main()的区别?
1,main():相当于 int main()
2,int main():int 是main() 函数的返回类型。这表明main()函数返回的值是整数且授受任何数量的参数。
3,void main():void为空类型。这表明main函数无返回值且授受任何数量的参数。
4,int main(void):main不接受任何参数且返回的值是整数。
另外请注意:
main()为老式的写法。返回类型int在新型的编译器重不可以省略,否则会有警告;
void main()为老式的写法。6.0及之前的VC使用这样的写法。
int main() 和 int main(void) 为新的写法。
八、python3教程?
Python3不像理科那样只看书,需要大量的动手实践。
建议采用边做边学的方法,先去找些题目,例如读取写入文件,打印当前时间等等。然后带着问题去学习基础知识(网上一大堆,随便搜搜都能找到),学了就去实践,碰到问题解决问题。这样的话,相信你很快就能提高自己的Python3水平了。
九、her name与she is name区别?
she's name是错误的表达方式.
一般,’s 表达的省略是has is 或was,而不是“……的”的意思.her name is lusy 才是正确的表达方式.
以下是her的用法:
代词 pron.
1.(she的所有格)她的
I saw Mary with her mother.
我看见玛丽同她妈妈在一起.
2.(she的宾格)她
I met her in the park.
我在公园里遇见她.
3.【口】(作主格补语,用来代替she)(是)她
Is that her?
那就是她吗?
4.【口】(用于than或as后面,代替she)她
Janet is taller than her.
珍妮特的身材比她高.
以下是she's的解释:
【口】=she is; she has
十、family name与given name区别?
family name释义:
姓氏
例句:
He had disgraced the family name.
他玷污了家族的名声。
given name释义:
教名;名字(等于first name)
例句:
What is your given name?
你的名字是什麽?释义:
教名;名字(等于first name)
例句:
What is your given name?
你的名字是什麽?
热点信息
-
在Python中,要查看函数的用法,可以使用以下方法: 1. 使用内置函数help():在Python交互式环境中,可以直接输入help(函数名)来获取函数的帮助文档。例如,...
-
一、java 连接数据库 在当今信息时代,Java 是一种广泛应用的编程语言,尤其在与数据库进行交互的过程中发挥着重要作用。无论是在企业级应用开发还是...
-
一、idea连接mysql数据库 php connect_error) { die("连接失败: " . $conn->connect_error);}echo "成功连接到MySQL数据库!";// 关闭连接$conn->close();?> 二、idea连接mysql数据库连...
-
要在Python中安装modbus-tk库,您可以按照以下步骤进行操作: 1. 确保您已经安装了Python解释器。您可以从Python官方网站(https://www.python.org)下载和安装最新版本...