main方法
main函数的分析(python)
对于很多编程语言来说,程序都必须要有一个入口,比如C,C++,以及完全面向对象的编程语言Java,C#等。如果你接触过这些语言,对于程序入口这个概念应该很好理解,C,C++都需要有一个main函数作为程序的入口,也就是程序的运行会从main函数开始。同样,Java,C#必须要有一个包含Main方法的主类,作为程序入口。
而Python则不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。
一个Python源码文件(.py)除了可以被直接运行外,还可以作为模块(也就是库),被其他.py文件导入。不管是直接运行还是被导入,.py文件的最顶层代码都会被运行(Python用缩进来区分代码层次),而当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行。
假设我们有一个const.py文件,内容如下:
PI = 3.14
def main():
print("PI:", PI)
main()
# 运行结果:PI: 3.14
现在,我们写一个用于计算圆面积的area.py文件,area.py文件需要用到const.py文件中的PI变量。从const.py中,我们把PI变量导入area.py:
from const import PI
def calc_round_area(radius):
return PI * (radius ** 2)
def main():
print("round area: ", calc_round_area(2))
main()
'''
运行结果:
PI: 3.14
round area: 12.56
'''
我们看到const.py中的main函数也被运行了,实际上我们不希望它被运行,因为const.py提供的main函数只是为了测试常量定义。这时if __name__ == "__main__"派上了用场,我们把const.py改一下,添加if __name__ == "__main__":
PI = 3.14
def main():
print("PI:", PI)
if __name__ == "__main__":
main()
运行const.py,输出如下:
PI: 3.14
运行area.py,输出如下:
round area: 12.56
如上,我们可以看到if __name__ == "__main__"相当于Python模拟的程序入口,Python本身并没有这么规定,这只是一种编码习惯。由于模块之间相互引用,不同模块可能有这样的定义,而程序入口只有一个。到底哪个程序入口被选中,这取决于__name__的值。
通俗的理解__name__ == '__main__':
if __name__ == '__main__'的意思是:
当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;
当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。
#hello.py
def foo():
str="function"
print(str);
if __name__=="__main__":
print("main")
foo()
运行结果
python hello.py #运行结果 main function
在Python Shell中运行结果
>>> import hello >>> hello.foo() function >>> hello.__name__ 'hello'
可以发现这个内置属性__name__自动的发生了变化。
这是由于当你以单个文件运行时,__name__便是__main__
当你以模块导入使用时,这个属性便是这个模块的名字。
典型的Python文件结构:

main函数的分析(scala)
object HelloScala
{
def main(args: Array[String]): Unit =
{
println("I Love You Scala");
}
}
如图所看到的,在Scala中能够使用object和class分别定义一个类。两者还是存在一些区别。以后我会在专门的博客中给予介绍。
在Scala中定义一个函数使用:def 来修饰
完整定义一个函数为:
def 函数名(參数:參数类型。參数:參数类型): 返回值类型={
}
比如:
def methodName(parameterStr: String, parameterInt: Int): Int =
{
return 1;
}
Unit表示这种方法没有返回值,相当于Java其中的void,在Java中叫做返回类型,在Scala中叫做结果类型。
object RunAppDemo {
def main(args:Array[String]) {
println("Hello, Scala")
}
}
这种方式省略了返回值类型。
println("I Love You Scala");
就是向控制台打印一句话。全部Scala程序的入口都是从main函数开始的。
基本规则(scala)
每一种语言都有自己规定。记住这些有助于我们不在后面的编程犯错,写出更加美丽的程序出来。
区分大写和小写:这点和非常多语言一样 Scala也是区分大写和小写的,比如HELLO和hello是意义全然不同的
类名:首字母大写,而且採用驼峰结构。比如:HelloWorld.scala
方法名:除首个单词的首字母小写以外。其余单词首字母大写。比如:def getData(){}
变量命名:以字母或者下划线开头。能够使用字母,数字或下划线。“$”字符在Scala中是保留关键字。不能使用。
换行符:Scala是面向行的语言,语句可以用分号(;)结束或换行符(println())
python参考:
https://blog.csdn.net/yjk13703623757/article/details/77918633
https://www.cnblogs.com/jpfss/p/9227532.html
scala参考:
https://www.cnblogs.com/jhcelue/p/7299568.html
https://blog.csdn.net/w_j_w2010/article/details/49741849
https://www.cnblogs.com/ahu-lichang/p/7207847.html?utm_source=itdadao&utm_medium=referral
https://www.cnblogs.com/sayhihi/p/7402698.html
main方法的更多相关文章
- 一个java文件中可包含多个main方法
java中的main方法是java应用程序的入口,java程序在运行时,首先调用执行main方法.但并不是说java中只能有一个main方法,不同类中都可以包含main方法.当JVM进行编译时,会提示 ...
- java 执行 jar 包中的 main 方法
java 执行 jar 包中的 main 方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar执行后总是运行指定的主方法,如果 jar 中有多 ...
- 10、代码块、构造代码块、静态代码块及main方法之间的关系
1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...
- 为什么使用Junit Test而不用普通java main方法来完成测试?
因为在程序里边,一个接口对应一个实现方法,而在接口中常常会定义相关的很多方法,所以在测试的时候,如果都在main方法里边进行测试,main方法就会显得臃肿,而且不便于以后其他人测试以及查看测试数据,用 ...
- Java中是否可以调用一个类中的main方法?
前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...
- 解决Java接口内部类的main()方法无法打印输出的问题
问题源自<Thinking in Java>关于内部类的章节,例子如下: public interface ClassInInterface{ void howdy(); public c ...
- maven project中,在main方法上右键Run as Java Application时,提示错误:找不到或无法加载主类XXX.XXXX.XXX
新建了一个maven project项目,经过一大堆的修改操作之后,突然发现在main方法上右键运行时,竟然提示:错误:找不到或无法加载主类xxx.xxx.xxx可能原因1.eclipse出问题了,在 ...
- 【细说Java】关于main方法的一些细节
Public static void main(String[] args) public :main方法是jvm运行的入口,所以必须是public来供外部调用 static :main方法无需生成对 ...
- 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。
22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...
- main方法中声明8种基本数据类型的变量并赋值
main方法中声明8种基本数据类型的变量并赋值 char→ int→ long→ float→ double byte→ short→
随机推荐
- Oracle常用SQL时间函数
1.查询当前日期和时间 select sysdate from dual; 2.查询本月最后一天 select last_day(sysdate) from dual; 3.查询前后多少月 ) fro ...
- Java实现大批量数据导入导出(100W以上) -(三)超过25列Excel导出
前面一篇文章介绍大数据量导出实现: Java实现大批量数据导入导出(100W以上) -(二)导出 这篇文章在Excel列较少时,按以上实际验证能很快实现生成.但如果列较多时用StringTemplat ...
- mac 终端连接服务器报错
今天在连接虚拟机服务器时突然报了一个 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!的错误.  会出现这个错误的原因是在第一次进行SSH连接时,会生 ...
- Primecoin服务端更新--操作流程
Primecoin服务端更新流程: 一.下载更新文件primecoin_x.y.z_xx.zip到/servers目录下:这里是把:版本primecoin0161alpha1更新到:版本primec ...
- 杭电2024 C语言合法标识符
链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2024 开始真的对这题是一点头绪都没有,简直了.然后事实证明是我想多了,这题主要是把概念给弄清楚 ...
- C++打开文件夹
https://bbs.csdn.net/topics/392055617?page=1 见2楼 system("start \"\" \"文件夹路径\&q ...
- 谈谈spring mvc与struts的区别
1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...
- Linux centosVMware 告警系统主脚本、告警系统配置文件、告警系统负载脚本、告警系统502日志脚本、告警系统disk监控脚本、告警系统邮件引擎
一.告警系统主脚本 要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件. 程序架构 ...
- Python 面试问答 Top 25
Python 是一种解释型,交互式,面向对象的高级编程语言.和别的一些使用标点符号的语言不同,Pythons使用了大量的英语单词作为关键字,因而具有很好的可读性.而且跟其他编程语言相比,它有更少的语法 ...
- css属性选择器: | 与 ~
[attribute|=value] 选择器用于选取带有以指定值开头的属性值的元素. 注释:该值必须是整个单词,指属性的值是一个完整的单词,并未被中断.如“eng”."img".& ...