python全栈开发《03.环境搭建与脚本结构之python脚本执行的入口》

1.什么是脚本的入口

说到什么是代码执行的入口,对于入口这个词,大家都不会感到陌生。进入一栋大楼是需要有入口的,赛车想要进入赛道也一定要有一个入口。

所以,程序的执行,也需要这么一个入口。对于程序的执行入口来说,在整个程序中,一般是唯一的。

也就是说,它只有一个入口。其实这也很好理解,如果有很多个入口同时开放的话,python解释器就不知道应该走哪个去执行你的代码了。

一般我们称代码执行的入口叫做主函数main

这个main就是主要的意思。那么,入口是非常重要的。所以用main来表示。

2.脚本入口的写法

举个例子,假如你的名字叫做小明,那么对于python脚本来说,脚本名就是它的名字。所以,在朋友的眼里,你就是小明。

那么这个name就等于小明。在python中,两个等号代表等于的意思。所以,在别人眼里,你的名字就是小明。

但是你自己在你自己眼里,你是你自己。你是你自己的主人。所以name又等于main。

所以,当python解释器执行到这个脚本的时候,发现了自己在执行自己的时候,就代表入口已经打开。可以执行入口里面的程序了。

3.缩进

if代表的是如果的意思。翻译过来说:如果自己是自己,或者说,如果我们发现python的入口。

注意看,main的后面有个冒号,冒号后面回车了,在下一行有一个print语句,但是print语句它的起始位置并没有与上一行的if持平。

而是通过了一个tap键或者是四个空格的距离,那么这个距离就代表的是缩进。

这里有个标准,只要看到冒号,下一行就需要缩进了。缩进的出现,是伴随着冒号出现的。并且生成出一个新的代码块。

比如,过去一直在做的练习中,我们的脚本里,每行都是从行首也就是一行的开始位置出现,它们从垂直的角度看,起始位置都是一样的。

这代表了它们是同一的代码块的程序。

例如图片中的第一行开始到if这行代码,这三行代码,它们的起始位都是相同的。这也代表了它们是相同级别的代码块。

那么,我们再看新的代码块,往往就是伴随着冒号的出现了。print这句话是通过if这行的最后的冒号来出现的。

也可以认为,这个新的代码块是为上一层,离它最近的冒号语句服务的。

那么,通过缩进生成的代码块,当它们拥有多行代码的时候,它们每行代码的起始位置要与这个代码块第一个缩进的起始位置持平。

也就是说,我们在这个截图里,print是基于我们入口语法冒号生成的新语法块。

如果再有一个print语句,就与我们这一行的print语句持平了。

如果想结束关于这个缩进里面的代码块,应该怎么做呢?现在这个新的代码块里只有一个print语句,当然它也可以有多句。

如果我们想结束的话,只要在最新的一行里将它的起始位置回到上一级。也就是和if,import保持在同一个起始位置就可以结束我们这个缩进里面的代码块了。

go 复制代码
# coding:utf-8

import os

if __name__=='__main__':
    print(os.getcwd())
    print('123')
    
print('我回到了一级代码块')

在未来的开发中,缩进会非常频繁的使用,并且一个代码块完成之后,回到上一级代码块继续开发也是非常平常的事情。

不过,对于代码入口语句来说,希望它是整个脚本最后一个代码块部分,在它之下,如果它缩进的下一个代码块完成了开发,就不要再有代码出现了。

所以,我们希望入口语法是整个程序的末尾。因为代码是自上而下逐行执行的,入口函数会根据在它之上的程序去运行代码块之中的语句,比如os.getcwd函数是基于上面的导入os来实现的。

另外,因为缩进的学习,涉及到了if这个单词,在未来学习条件语句的时候,会更加详细的介绍它。在这里作为客串同学,帮助了我们了解缩进。

最后,我们不希望在我们的入口函数缩进完成之后,还有新的上一级的语法代码块出现,如果需要,它在上面:

go 复制代码
# coding:utf-8

import os

print('我本来就是一级代码块')

if __name__=='__main__':
    print(os.getcwd())
    print('123')

4.是否一定需要脚本入口

并不是。这个入口的意义:简单来说,分为两点。1.它是一个好的规范,可以把需要的业务代码写在脚本的上方,然后在入口语句的缩进代码块中统一执行,这样做的好处是代码结构清晰,容易维护。

2.python也在向其它的语言看齐,其它语言严格要求必须要有入口程序的,否则无法执行。所以,python创建这样一个入口语法,也是在标准上向其它语言看齐。

相关推荐
尘浮生几秒前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
明月看潮生20 分钟前
青少年编程与数学 02-003 Go语言网络编程 15课题、Go语言URL编程
开发语言·网络·青少年编程·golang·编程与数学
南宫理的日知录31 分钟前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
coberup40 分钟前
django Forbidden (403)错误解决方法
python·django·403错误
逊嘘1 小时前
【Java语言】抽象类与接口
java·开发语言·jvm
Half-up1 小时前
C语言心型代码解析
c语言·开发语言
龙哥说跨境1 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
Source.Liu1 小时前
【用Rust写CAD】第二章 第四节 函数
开发语言·rust
monkey_meng1 小时前
【Rust中的迭代器】
开发语言·后端·rust
余衫马1 小时前
Rust-Trait 特征编程
开发语言·后端·rust