Python 入口函数(菜鸟入门)

最近在组内研究专项项目,其中的一个现有工具是用 Python 开发的,我的目标是对这款工具的流程进行优化。虽然可以找到对应的开发者了解现有流程,然后结合我的研究提出优化方案,最后让 TA 去编码实现。但是程序员心理使然,什么东西都想自己琢磨明白,于是开启了摸索历程。

上网搜索资料,下载了 PyCharm 开发工具,进行了一些环境配置,于是乎就开工了。由于之前没有接触过 Python 语言,打开代码文件夹就蒙圈了,只见一大堆 .py 文件,不知道从哪里入手。本人 C# 出生,写过少许 C/C++,所以一直想着有个类似 Main() 函数的东西是整个程序的入口。然而,查遍了整个目录,没有找到任何线索,接下来就开始各种捣鼓。

需要说明的是,本文仅是一只 Python 菜鸟的学习笔记,并不一定正确或完整,欢迎大家斧正。

每每接触新工具或新语言,都有一种莫名的欣喜,乐于用旧知识来推敲,故而载之。

顺序执行

在 Python 世界中,每一个 .py 文件就是一个模块,在控制台中输入文件名即可调用该模块。

模块有些类似于 批处理文件(.bat) ,其中的语句是按顺序执行的。

这点和我最初的想象不一致,总想着它和 C# 等语言一样,文件中应该由 class 来组织,实则不然。

首先,在 D盘 根目录创建一个名 Test1.py 的文件,内容如下:

print("Test1 First")

print("Test1 Second")

然后,转到控制台,将目录切换到 D盘 ,启动 Test1.py 模块,结果如下:

D:\>python Test1.py

Test1 First

Test1 Second

嗯,不错,完全符合预期,再试一下模块间调用。

在 D盘 中创建 Test2.py 文件,在其中调用 Test1.py 模块:

import Test1

print("Test2 First")

print("Test2 Second")

在控制台中启动 Test2.py ,输出结果:

D:\>python Test2.py

Test1 First

Test1 Second

Test2 First

Test2 Second

可以理解的是,在 Test2.py 文件中, import Test1 语句在前面,所以在导入 Test1 模块时便执行了其中的语句,因此 Test1 中的输出在前面。

如果将 import Test1 放在后面, Test1 的输出也会出现在后面:

print("Test2 First")

print("Test2 Second")

import Test1

D:\>python Test2.py

Test2 First

Test2 Second

Test1 First

Test1 Second

函数定义

模块中的代码能否更加灵活?除了按顺序执行,还可以根据需要调用,就像 C# 语言中的函那样。

上文中的 Print 应该就是一个内建函数,查资料,找到 Pyhton 中函数的定义:

def 函数名(参数列表):

函数体

赶紧试一下,在 Test1.py 中定义一个 SayHello 函数:

print("Test1 First")

print("Test1 Second")

def SayHello():

print("Hello World")

SayHello()

print("Test1 Third")

输出结果:

D:\>python Test1.py

Test1 First

Test1 Second

Hello World

Test1 Third

嗯,符合预期,没毛病,按顺序执行。

如果只是定义 SayHello() 函数,而没有调用的话,是不会有 Hello World 一行输出的。

接下来,尝试一下模块间函数的调用,修改 Test2.py 文件:

import Test1

print("Test2 First")

print("Test2 Second")

Test1.SayHello()

输出如下:

D:\>python Test2.py

Test1 First

Test1 Second

Hello World

Test1 Third

Test2 First

Test2 Second

Hello World

哈哈,对的,对的,最后一行的 Hello World 即是 Test2.py 中的 Test1.SayHello() 语句输出的。

至于前面第三行的 Hello World 嘛,那是 import Test1 时由 Test1 模块输出的。

__main__

了解了函数的定义及模块间的调用,随之而来的疑惑是,程序\模块 的入口在哪里。

搜索了一下资料,找到了 __name__ 属性。先来测试一段代码,修改 Test1.py 文件:

def SayHello():

print("Hello World")

def SayBye():

print("Bye World")

SayHello()

if(__name__=="__main__"):

print("Main")

SayBye()

在控制台中直接启动 Test1.py :

D:\>python Test1.py

Hello World

Main

Bye World

嗯,还好理解,按顺序执行的,且满足了 if(__name__=="__main__") 条件,所以输出了 Main 。

且慢,换一种方式,通过 Test2.py 间接调用 Test1.py 试试,先修改 Test2.py 文件:

import Test1

print("Test2 First")

print("Test2 Second")

然后启动 Test2.py 文件来看看结果:

D:\>python Test2.py

Hello World

Bye World

Test2 First

Test2 Second

纳尼,怎么没有输出 Mani 呢?嗯,有点意思,找到 菜鸟教程 的解释:

每个模块都有一个 `__name__` 属性,当其值是 `__main__` 时,表明该模块自身在运行,否则是被引入

这个 __name__ 属性还好理解,模块的保留字段(属性),但是怎么理解这个 __main__ 呢?

这里的 __main__ 可能可以理解为程序的入口函数,模块直接被入口函数调用,则其 __name__ 属性值为 __main__,否则为 模块文件名:

def SayHello():

print("Hello World")

def SayBye():

print("Bye World")

SayHello()

if(__name__=="__main__"):

print("Main")

else:

print(__name__)

SayBye()

D:\>python Test2.py

Hello World

Test1

Bye World

Test2 First

Test2 Second

总结

本文讲了 Python 模块的一些基本特性,涉及到的知识非常粗浅,仅为记录个人的学习过程。

每每接触新工具或新语言,都有一种莫名的欣喜,乐于用旧知识来推敲,故而载之。

最后,引用 菜鸟教程 关于 模块 的一些重要解释:

模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。

一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

模块是可以导入其他模块的。在一个模块的最前面使用 import 来导入一个模块,当然这只是一个惯例,而不是强制的。

python主函数入口_Python 入口函数(菜鸟入门)相关推荐

  1. python主函数调用格式_Python的模块与函数

    一.概述Python的程序由包.模块和函数组成. 函数是一段可重用的有名称的代码.通过输入的参数值,返回需要的结果,并可存储在文件中供以后使用.几乎任何Python代码都可放在函数中.Python为函 ...

  2. python主函数调用格式_Python入门基础中怎么定义函数,函数调用,函数传递参数...

    什么是函数和为什么要用函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.已经知道Python提供了许多内建函数,比如print(). ...

  3. python主函数调用格式_python函数介绍

    1.函数定义与调用 函数是为了实现特定功能而封装起来的一组语句块,可以被用户调用 使用函数可以降低编程难度,将大问题分解成若干小问题:实现代码重用,函数可被多次调用 格式: def 函数名(参数列表) ...

  4. python random函数原理_Python random() 函数

    描述 random() 方法返回随机生成的一个实数,它在[0,1)范围内. 语法 以下是 random() 方法的语法: import random random.random() 注意:random ...

  5. python quit函数作用_Python常用函数学习笔记

    Python函数很多,常用的函数不同的场景侧重不同,学而时习之,不亦乐乎? abs # 求绝对值 Capitilize函数: # 有列表 li = ['aB', 'egon', 'smith', 'p ...

  6. python 字符串输入时间_Python input()函数:获取用户输入的字符串

    input() 函数用于向用户生成一条提示,然后获取用户输入的内容.由于 input() 函数总会将用户输入的内容放入字符串中,因此用户可以输入任何内容,input() 函数总是返回一个字符串. 例如 ...

  7. python内置函数调用_Python中函数的基本定义与调用及内置函数详解

    前言 函数function是python编程核心内容之一,也是比较重要的一块.首先我们要了解Python函数的基本定义: 函数是什么? 函数是可以实现一些特定功能的小方法或是小程序.在Python中有 ...

  8. python自定义函数参数_python自定义函数的参数之四种表现形式

    (1)def a(x,y):print x,y 这是最常见的定义方式,调用该函数,a(1,2)则x取1,y取2,形参与实参相对应,如果a(1)或者a(1,2,3)则会报错 (2)def a(x,y=3 ...

  9. python中函数定义_Python中函数的定义与使用

    原博文 2020-02-27 16:46 − 一.函数基本定义 定义函数的目的是为了让一段代码可以被重复使用 函数定义的语法: def 函数名([参数,参数.....]): 函数主体代码(多行代码) ...

最新文章

  1. Spark Streaming实践和优化
  2. 《90后程序员职场报告》:平均月薪近20K,每6个程序员就有1个是女性
  3. WinXP SSH连接不上虚拟机的解决方法
  4. php删除记录前的判断弹窗,thinkPHP删除前弹出确认框的简单实现方法
  5. Linux学习之三——操作档案与目录
  6. 《神经网络:回到未来》(Neural Nets Back to the Future)-ICML 2016
  7. 快速检查REST API是否有效的方法-从清单文件中获取详细信息
  8. SendMessage函数的常用消息及其应用
  9. Hostiko v54.0 – WordPress WHMCS-云服务器VPS主机销售模板源码
  10. 使用PCL从CAD模型中提取不同视角下的点云
  11. j结对开发——石家庄地铁查询系统
  12. 拼多多无货源一件代发怎么做,这些细节要知道
  13. 超声非线性成像-谐波成像基本知识
  14. 三国志·魏书·田豫传
  15. 论文笔记:Delving into Data: Effectively Substitute Training for Black-box Attack
  16. RTSP,RTP,RTCP协议
  17. http协议中get和post的区别
  18. 吴恩达卷积神经网络笔记,吴恩达人工智能公开课
  19. [翻译] 在 LaTeX 中对齐公式
  20. android导入support-v4包(导包通用教程)

热门文章

  1. 干货:如何利用机器学习实现有噪声标签样本分类模型?
  2. 进阶的“车厘子自由”,进化的“淘宝特价版”
  3. lru页面置换算法_C|内存管理|从LRU王国到NRU王国
  4. java实现续打功能_浅谈报表工具的打印方案
  5. java sqlserver 2000_谁能救救我啊,关于JAVA连接SQLserver2000
  6. 快速使用Python连接MySQL数据库的方法
  7. Python中断多重循环的两种思路
  8. python对文件进行压缩解压缩基于zip格式
  9. Python3.8 新特性:仅位置参数
  10. docker服务启动:service docker start和systemctl start docker两种命令有什么区别?