python 关于main函数以及if __name__=='__main__'的理解
1.main函数:
在C/C++/Java中,main是程序执行的起点,Python中,也有类似的运行机制,但方式却截然不同:Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,可以认为是Python的main函数。
每个文件(模块)都可以任意写一些没有缩进的代码,并且在载入时自动执行,为了区分主执行文件还是被调用的文件,Python引入了一个变量__name__,当文件是被调用时,__name__的值为模块名,当文件被执行时,__name__为'__main__'。这个特性,为测试驱动开发提供了极好的支持,我们可以在每个模块中写上测试代码,这些测试代码仅当模块被Python直接执行时才会运行,代码和测试完美的结合在一起。
典型的Python文件结构:
转载自:https://blog.csdn.net/DreamD1987/article/details/9446715
import sys2 def Fuc():3 print 'hello'4 5 if __name__ == '__main__':6 if len(sys.argv) != 3:7 print 'Usage: python input_name output_name'8 exit(1)9 f_input = sys.argv[1]
10 f_output = sys.argv[2]
11 Fuc()
- 5行“ if __name__ == '__main__':”含义:python文件后缀为".py"。 其中分两类:一类是直接执行, 另一类是作为模块被调用(import ***.py).
- __name__ 作为模块的内置属性,即".py"文件的调用方式。如果等于“__main__"就直接执行本文件, 如果是别的就是作为模块被调用
- 6行:sys.argv 用来获取命令行参数。对于“python code.py input_name output_name ”,共三个参数:code.py为sys.argv[0], input_name 为sys.argv[1], output_name为sys.argv[2] 。 同时注意引入模块sys
初次接触Python的人会很不习惯Python没有main主函数。 以下面的程序为例:
#hello.py def foo(): str="function" print(str); if __name__=="__main__": print("main") foo()
其中if __name__=="__main__":这个程序块类似与Java和C语言的中main(主)函数
在Cmd中运行结果
C:\work\python\divepy>python hello.py
main
function
在Python Shell中运行结果
>>> import hello
>>> hello.foo()
function
>>> hello.__name__
'hello'
>>>
可以发现这个内置属性__name__自动的发生了变化。
这是由于:
当你以单个文件运行时,__name__便是__main__
当你以模块导入使用时(import ***.py),这个属性便是这个模块的名字。
2.关于if __name__=='__main__'
if __name__=='__main__'说白了就是判断__name__变量是不是等于__main__,
- 当执行文件本身时候__name__变量等于main,此时判断成立并执行判断语句中的代码,
- 当调用该模块的时候__name__并不等于__main__条件不成立,不执行判断下面的语句,可以认为为了调试模块,因为在模块导入的时候并不执行if下面的语句
- 对于编程语言来说,程序都必须要有一个入口,比如java和c#必须要有一个包含main方法的主类来作为程序的入口,而python则不同,它属于脚本语言,它是从脚本的第一行开始执行,没有统一的入口。
- 一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。
- if __name__ == '__main__' 就相当于是 Python 模拟的程序入口,由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 __name__ 的值。
- __name__ 是内置变量,用于表示当前模块的名字,如果一个模块被直接运行,其 __name__ 值为 __main__。
- if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。
转载自:https://blog.csdn.net/u010159842/article/details/52804058
https://www.cnblogs.com/zwgblog/p/7494482.html
python 关于main函数以及if __name__=='__main__'的理解相关推荐
- python中main函数在运行中不是必须要写的_Python必备知识之“if __name__ == '__main__':”...
在学习Python的过程中经常会看到"if __name__ == '__main__':"这行代码,那么这行代码的作用究竟是什么呢? "if __name__ == ' ...
- 为什么Python没有main函数?
作者 | 豌豆花下猫 来源 | Python猫(ID:python_cat) 众所周知,Python中没有所谓的main函数,但是网上经常有文章提到" Python的main函数" ...
- 为什么 Python 没有 main 函数?
作者 | 豌豆花下猫 来源 | Python猫(ID:python_cat) 众所周知,Python中没有所谓的main函数,但是网上经常有文章提到" Python的main函数" ...
- python 中main函数总结
Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,可以认为是Python的main函数. 每个文件(模块)都可以任意写一些没有缩进的代码 ...
- python没有main函数的概念吗_为什么Python没有main函数?
作者 | 豌豆花下猫 来源 | Python猫(ID:python_cat) 众所周知,Python中没有所谓的main函数,但是网上经常有文章提到" Python的main函数" ...
- python没有main函数也可以_为什么Python没有main函数?,
为什么Python没有main函数?, 我为什么也不推荐 毫无疑问,Python中没有所谓的主入口函数,但是互联网上经常有文章提到" Python的Main函数"和"建议 ...
- 魔力Python--if __name__ == '__main__' 的理解
if __name__ == '__main__' 的理解 __name__ 是当前模块名,当模块被直接运行时模块名为 __main__ . 这句话的意思就是,当模块被直接运行时,以下代码块将被运行, ...
- 【Python】main函数 if __name__=='__main__' 详解
引言 我们先看下各个编程语言的代码框架输出Hello,World C #include <stdio.h> int main() {printf("Hello, World! \ ...
- python强制结束函数_为什么Python没有 main 函数?终于有人给出了正确答案!
毫无疑问,Python中没有所谓的 main 入口函数,但在网上经常有文章提到"Python中的main函数"和"建议编写main函数"等. 他们的目的可能是模 ...
- python def main好处_python中 __name__及__main()__的妙处
#hello.py def sayHello(): str="hello" print(str); if __name__ == "__main__": pri ...
最新文章
- 对话计算机史学权威,才知道量子计算机马上要来了
- MIT自动驾驶船下水!可乘坐5人,阿姆斯特丹运河航行3小时误差不到0.17米
- Android的消息机制(2)
- CUBLAS_STATUS_ALLOC_FAILED CUDA_ERROR_OUT_OF_MEMORY
- 【Python学习教程】:装饰器的详细教程,通俗易懂
- 从@Transactional看事务的传播和隔离
- oracle / parallle /,Oracle海量数据迁移之使用shell启用多个动态并行
- android 电池高温关机,Android 关机问题分析指南
- 单片机 c语言 宏程序,宏程序学习的几点心得.doc
- webpack手动构建vue和vue-cli构建使用 px2rem-loader ,全局自动转换px单位,让自适应来的更简单点!...
- 软件配置--ubuntu16.04
- 浅析帧、帧数、帧率、FPS区别
- 远程主机强迫关闭了一个现有的连接.
- 学习OpenCV(4) 基于OpenCV的双目测距程序
- 脑机接口的过去、现在与未来
- java的生活状态,生活状态 - Dorian's Blog - BlogJava
- 2022年系统集成项目管理工程师考试知识点:项目成本管理
- Abnormal Activity Detection Using Pyroelectric Infrared Sensors
- 一键下载steam高清视频
- 将动态磁盘无损转成基本磁盘