python中def main是什么意思_关于python:为什么使用def main()?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

What does if __name__=="__main__" do?

我看过一些代码示例和教程

1

2

3

4

5def main():

# my code here

if __name__ =="__main__":

main()

但是为什么呢?有没有什么理由不在文件的顶部定义函数,然后在下面写代码?工业工程

1

2

3

4

5

6

7

8

9def my_function()

# my code here

def my_function_two()

# my code here

# some code

# call function

# print(something)

我只是想知道主旋律有没有押韵?

请参阅stackoverflow.com/questions/419163/what-do-if-name-main-do

stackoverflow.com/questions/419163/what-do-if-name-main-do无法回答整个问题。

所谓的副本并没有回答:拥有一个main()函数(而不是仅仅将所有代码写入"if name"块)是有用的,因为它可以避免意外地创建可能影响其他函数的全局变量。

以及其他答案,有一个执行代码的入口点可以使用setup.py中的入口点自动生成可执行脚本,这些脚本包装导入和执行步骤。当你希望你的用户能够写setup-my-app ...而不是python2.7 /opaque/path/to/module.py ...时,这是很好的。

如果没有主sentinel,即使脚本作为模块导入,也会执行代码。

同样值得注意的是,拥有一个main()函数可以使用:import module; module.main()运行该代码。如果代码只是在if块中,则无法从其他地方运行。

其他人都已经回答过了,但我想我还有别的事要补充。

调用main()的if语句(无特殊顺序)的原因:

其他语言(如C语言和Java语言)有一个EDOCX1×7函数,它在执行程序时被调用。使用这个if,我们可以使python的行为像它们一样,这让许多人觉得更熟悉。

代码将更干净、更容易阅读和更具组织性。(是的,我知道这是主观的)

对于import来说,将python代码作为一个模块是可能的,不会产生不良的副作用。

这意味着可以对该代码运行测试。

这意味着我们可以将该代码导入到交互式Python shell中,并测试/调试/运行它。

def main中的变量是局部变量,而它之外的变量是全局变量。这可能会引入一些错误和意外行为。

但是,不需要编写main()函数并在if语句中调用它。

我自己通常开始写一些没有任何功能的废弃脚本。如果脚本变得足够大,或者如果我觉得将所有代码放在函数中对我有利,那么我重构代码并执行它。当我编写bash脚本时,也会发生这种情况。

即使您将代码放在主函数中,也不需要完全按此方式编写代码。一个简单的变化可能是:

1

2

3

4

5

6

7

8import sys

def main(argv):

# My code here

pass

if __name__ =="__main__":

main(sys.argv)

这意味着您可以从传递自定义参数的其他脚本(或交互shell)调用main()。这可能在单元测试或批处理时很有用。但请记住,上面的代码将需要解析argv,因此最好使用传递已解析参数的不同调用。

在我编写的面向对象应用程序中,代码如下所示:

1

2

3

4

5

6class MyApplication(something):

# My code here

if __name__ =="__main__":

app = MyApplication()

app.run()

因此,请随意编写更适合您的代码。:)

使用sys.argv作为参数调用main的一个好处是,这种方法与argparse模块(imo是处理命令行参数的正确方法)很好地工作。你所需要做的就是在main中把argv传给parse_args。

如果foo.py的内容

1

2

3print __name__

if __name__ == '__main__':

print 'XXXX'

文件foo.py可以通过两种方式使用。

imported in another file : import foo

在这种情况下,__name__为foo,代码段不执行,不打印XXXX。

executed directly : python foo.py

直接执行时,__name__与__main__相同,执行该段代码并打印XXXX。

使用此功能在同一模块中编写各种单元测试的一种。

"if __name__=="__main__":是做什么的?"已经回答。

如果您使用import模块,那么拥有main()功能允许您调用它的功能。这个(imho)的主要(没有双关语)好处是您可以对它进行单元测试。

两个答案相同的问题不会重复。

@布巴卡佐巴:我同意。我没有将这个问题标记为副本。这个问题的一部分有一个很好的答案,我认为复制答案毫无意义。我回答了剩下的问题。

考虑第二个脚本。如果您将其导入到另一个目录中,那么将执行"全局级"的指令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为5G手机芯片被唱衰:美研究机构拆解6款量产机,不谈能力对标高通骁龙X50...

来源:凹非寺全球5G手机芯片到底哪家强?能力上来看,量产的华为巴龙5000参数超过骁龙X50,但最近英国研究机构IHS Markit拆解6款5G手机后给出另一面结论:华为手机5G,没高通骁龙有竞争力。IHS的结论&#xff0c…

CSS3-06 样式 5

浮动(Float) 关于浮动,要说的可能就是:一个设置了浮动的元素会尽量向左移动或向右移动,且会对其后的元素造成影响,其后的元素会排列在其围绕在其左下或右下部。似乎就这么简单,但是在实际开发中…

python将数据写入Excel

import xlsxwriter workbook xlsxwriter.Workbook(D:\data.xlsx, {nan_inf_to_errors: True}) #创建一个Excel文件 worksheet workbook.add_worksheet() #创建一个sheettitle [U1,U2,U3,U4,U5,U6,U7,U8,U9,U10] #表格title worksheet.write_row(A1,title…

python脚本编程实例_从零学python系列之数据处理编程实例(一)

要求:分别以james,julie,mikey,sarah四个学生的名字建立文本文件,分别存储各自的成绩,时间格式都精确为分秒,时间越短成绩越好,分别输出每个学生的无重复的前三个最好成绩&#xff0…

量子纠缠为什么不能用于瞬时通讯?

来源:数学职业家什么是信息? 信息的一个比较被认可的定义是1948年数学家香农在论文中提出的:信息是用来消除随机不定性的东西。比如,盒子里有一个硬币,它可以是正面向上,也可以是反面向上,在打开…

第二次冲刺每日站立会议03

会议照片: 会议内容: 祖浩然: 昨天:学习要进行优化的相关知识 今天:对前两个界面进行界面的修改 遇到的问题:设置背景图片之后按钮无法显示 刘洋: 昨天:学习要进行优化的相关知识 今…

cad菜单栏快捷键_天正建筑菜单栏不见了怎么调出来

在使用天正建筑得出时候,可能会因为不小心,把菜单栏关闭了,却一时不知道怎样打开,下面使用三种方式,教你将不见了的菜单栏调出来。方法一:使用键盘快捷键1.在界面中,我们可以看到,这…

图说报告 | “智能+”的终极版图:数字孪生世界

来源:阿里研究院数字孪生(Digital Twin)是近几年兴起的非常前沿的新技术,进入Gartner2019年十大战略技术趋势行列。今天,从300万个波音777零部件到人类心脏,其数字孪生体都可以复制。在未来的医疗领域&…

BZOJ2732: [HNOI2012]射箭

列出不等式&#xff0c;二分&#xff0c;半平面交判定。注意可行域可能为点或线段或无界区域。坐标范围略大&#xff0c;算出来a的范围约为-1e9~-1e-18&#xff08;a<0&#xff09;&#xff0c;理论上要用long double&#xff0c;不过好像double也能过。 #include<algori…

MATLAB画频率响应曲线(幅频特性和相频特性)并将横坐标转换为赫兹hz单位

matlab画频率响应曲线的函数为&#xff1a; [h,w] freqz(b,a,n) b,a&#xff1a;传递函数系数 h&#xff1a;频率响应 w&#xff1a;角频率&#xff0c;0~π 更多参数解释参考官方链接https://ww2.mathworks.cn/help/signal/ref/freqz.html?requesteddomaintrue 用freqz…

python3.6配置环境变量_python安裝及环境变量配置

一、安装 1.python下载 进入官网后选择download&#xff0c;选择windows进入如下页面1.1 python3.6.6版本下载 首先我们下载python3.6.6版本&#xff0c;下滑页面找到此位置&#xff0c;64位系统选择红色框框&#xff0c;32位选择蓝色框框点击进行下载 1.2 python2.7版本下载 下…

sqlserver binary varbinary image 的区别

binary固定长度的二进制数据&#xff0c;其最大长度为 8,000 个字节。varbinary可变长度的二进制数据&#xff0c;其最大长度为 8,000 个字节。image可变长度的二进制数据&#xff0c;其最大长度为 2^31 - 1 (2,147,483,647) 个字节转载于:https://www.cnblogs.com/lvdongjie/p…

人与动物之间有没有一条不可逾越的鸿沟?——从基础存在论到生命哲学

来源&#xff1a;《哲学动态》 2018年第12期作者&#xff1a;舒红跃&#xff08;湖北大学哲学学院&#xff09;张哲&#xff08;湖北省道德与文明研究中心&#xff09;海德格尔《存在与时间》中对“此在”的生存论刻画是哲学史中的经典&#xff0c;此在“在-世界中-存在”是存在…

matlab显示曲线图中某个点的坐标值

在画好一幅曲线图后&#xff0c;有时候我们需要找出某个坐标的点&#xff0c;可以通过打开数据游标功能&#xff0c;此时鼠标点击的位置就会显示出坐标值&#xff0c;如下图&#xff1a; 此时保存下来的图也会带有显示的坐标值。 如果需要显示多个坐标的值&#xff0c;按住alt…

python保留字的是_Python保留字

下面的列表显示了在Python中的保留字。这些保留字不能用作常数或变数&#xff0c;或任何其他标识符名称。 所有 Python 的关键字只包含小写字母。 1、and and 用于表达式运算&#xff0c;逻辑与操作 2、as as用于类型转换 3、assert assert断言&#xff0c;用于判断变量或条件表…

数字滤波器的差分方程和传递函数

差分方程用于描述线性、时不变、因果滤波器 数字滤波器的差分方程表示为&#xff1a; 对应的系统函数/传递函数为&#xff1a; a_k&#xff0c;b_k为滤波器系数 当a_k0时&#xff0c;滤波器当前的输出仅依赖于输入&#xff0c;而不依赖过去的输出&#xff0c;称为非递归滤波器…

javascript中浅拷贝和深拷贝的理解

javascript中浅拷贝和深拷贝的理解 什么是拷贝&#xff1f; 简单地说就是复制&#xff0c;对数据的复制 浅拷贝&#xff1a;改变拷贝者的值&#xff0c;被拷贝者的值也会变化 深拷贝&#xff1a;改变拷贝者的值&#xff0c;被拷贝者的值不会变化 由于基本数据类型是存放在栈中&…

2019年AI实力对决:美国领跑,中国追赶,欧盟弱势

来源&#xff1a; 智东西&#xff0c;Data Innovation美国当地时间8月18日&#xff0c;美国数据创新中心&#xff08;Center for Data Innovation&#xff09;发布针对中国、美国和欧洲三大地区的人工智能发展报告&#xff0c;报告显示&#xff0c;目前美国在AI发展中仍然保持领…

谷歌学术搜索技巧:查找一个句子的某个空应该用什么词

在写论文的时候经常遇到某个地方不知道应该用什么词比较专业的问题&#xff0c;举个例子&#xff1a; we used training strategy * in literature [10] *号处应该填什么词比较专业呢 这时可以在谷歌学术找到答案 在谷歌学术搜索中输入&#xff1a; "training strate…

python中str和input_python中eval()函数和input()函数用法解析

今天给大家讲解Python中eval()函数和input()函数的用法&#xff0c;希望通过实例的讲解之后大家能对这两个函数有更加深刻的理解。 1.eval()函数 eval(<字符串>)能够以Python表达式的方式解析并执行字符串&#xff0c;并将返回结果输出。eval()函数将去掉字符串的两个引号…