比如说我写了三个py程序,main m1m2在main中导入了m1 在m1中导入了m2。那么,可以直接在main中用m1吗?

本章重点介绍 Python 编程环境的搭建,包括各个平台下 Python 的下载和安装,常见 IDE 的使用,如何运行 Python 程序等。我还会亲自带着大家编写并运行第一个 Python 程序,让大家认识一下最简单的 Python 代码。

本章的后半部分还介绍了一下 Python 基础语法,包括注释、缩进、编码规范、标识符及命名规范、关键字等。

从本章开始,我们就正式开始学习 Python 代码了。

在 Windows 上安装 和安装普通软件一样简单,下载安装包以后猛击“下一步”即可。

C语言中文网的网址是:

输入完成以后注意保存。

运行 Python 源文件有两种方法:

字符串中可以包含英文、数字、中文以及各种符号。

print 输出字符串的格式如下:

字符串要放在小括号( )中传递给 print,让 print 把字符串显示到屏幕上,这种写法在 Python 中被称为函数(Function)。

需要注意的是,引号和小括号都必须在英文半角状态下输入,而且 print 的所有字符都是小写。Python 是严格区分大小写的,print 和 Print 代表不同的含义。

在 IDLE 下的演示效果:

也可以将多段文本放在一个 print 函数中:

注意,同一个 print 函数的字符串之间不会自动换行,加上\n才能看到换行效果。


图 2 将多个字符串放在一个 print 中

有编程经验的读者应该知道,很多编程语言(比如C语言、、 等)都要求在语句的最后加上分号;,用来表示一个语句的结束。但是 Python 比较灵活,它不要求语句使用分号结尾;当然也可以使用分号,但并没有实质的作用(除非同一行有更多的代码),而且这种做法也不是 Python 推荐的。

修改上面的代码,加上分号:

注意第 2 行代码,我们将两个 print 语句放在同一行,此时必须在第一个 print 语句最后加分号,否则会导致语法错误。

我建议大家加上小括号,这样写比较容易理解,而且兼容性好。

print 除了能输出字符串,还能输出数字,将数字或者数学表达式直接放在 print 中就可以输出,如下所示:

注意,输出数字时不能用引号包围,否则就变成了字符串。下面的写法就是一个反面教材,数学表达式会原样输出:

另外,和输出字符串不同,不能将多个数字放在一个 print 函数中。例如,下面的写法就是错误的:

Python 程序的写法比较简单,直接书写功能代码即可,不用给它套上“外壳”。下面我们分别使用C语言、Java 和 Python 输出C语言中文网的网址,让大家对比感受一下。

IDE 是 Integrated Development Environment 的缩写,中文称为集成开发环境,用来表示辅助程序员开发的应用软件,是它们的一个总称。

通过前面章节的学习我们知道,运行 C 语言(或 语言)程序必须有编译器,而运行 语言程序必须有解释器。在实际开发中,除了运行程序必须的工具外,我们往往还需要很多其他辅助软件,例如语言编辑器、自动建立工具、除错器等等。这些工具通常被打包在一起,统一发布和安装,例如 PythonWin、MacPython、PyCharm 等,它们统称为集成开发环境(IDE)。

因此可以这么说,集成开发环境就是一系列开发工具的组合套装。这就好比台式机,一个台式机的核心部件是主机,有了主机就能独立工作了,但是我们在购买台式机时,往往还要附带上显示器、键盘、鼠标、U盘、摄像头等外围设备,因为只有主机太不方便了,必须有外设才能玩的爽。

需要注意的是,虽然有一些 IDE 支持多种程序语言的开发(如 Eclipse、NetBeans、VS),但通常来说,IDE 主要还是针对某一特定的程序语言而量身打造的(如 VB)。

一般情况下,程序员可选择的 IDE 类别是很多的,比如说,用 Python 语言进行程序开发,既可以选用 Python 自带的 IDLE,也可以选择使用 PyCharm 和 Notepad++ 作为 IDE。并且,为了称呼方便,人们也常常会将集成开发环境称为编译器或编程软件,对此读者没必要较真儿,就把它当做“乡间俗语”吧。

百度搜索“Python IDE”会发现支持 Python 编程的 IDE 有很多,那么对于零基础的初学者,应该使用哪款 IDE 呢?

我个人推荐初学者使用 Python 自带的 IDLE。因为 IDLE 的使用方法很简单,非常适合初学者入门。本教程中使用的也是 Python 自带的 IDLE。

当然,除了 IDLE,还有很多其他的 IDE 供大家选择,这里列出常用的几个,喜欢探索的读者可自行安装使用。

PyCharm 具有语法高亮显示、Project(项目)管理代码跳转、智能提示、自动完成、调试、单元测试以及版本控制等一般开发工具都具有的功能,除此之外,它还支持 Django(Python 的 Web 开发框架)框架下进行 Web 开发。

PyCharm 开发工具可通过其官方网站(/pycharm/)下载获取。需要注意的是,该网站提供了 2 个版本,一个是社区版(免费并且提供源代码,适合多数读者),另一个是专业版(免费试用)。

有关 PyCharm 下载和安装,可阅读《》一节,至于如何使用 PyCharm 运行 Python 程序,可阅读《》一节。

Eclipse 是一个开源的、基于 Java 的可扩展开发平台,最初主要用于 Java 语言的开发。该平台可通过安装不同的插件,进行不同语言的开发。

PyDev 是一款功能强大的 Eclipse 插件,它可以提供语法高亮、语法分析、语法错误提示,以及大纲视图显示导入的类、库和函数、源代码内部的超链接、运行和调试等功能。

当 Eclipse 在安装 PyDev 插件后,就可以进行 Python 应用开发。其开发界面如图 2 所示。

有关 Eclipse+PyDev 下载和安装,可阅读《》一节,至于如何使用安装有 PyDev 插件的 Eclipse 编写并运行 Python 程序,可阅读《》一节。

VS Code 支持几乎所有主流开发语言的语法高亮、智能代码补全、自定义热键、括号匹配等功能,支持使用插件进行功能扩展,还针对网页开发和云端应用开发做了优化。

值得一提的是,使用 VS Code 编写 Python 代码,无需向其它编译器那样,通过创建项目来管理源代码文件,在 VS Code 中可以直接创建 Python 源代码文件。VS code 的开发界面如图 3 所示。

有关 VS Code 下载和安装,可阅读《》一节,至于如何使用 VS Code 编写并运行 Python 程序,可阅读《》一节。

进入 (如图 2 所示),可以看到 PyCharm 有 2 个版本,分别是 Professional(专业版)和 Community(社区版)。其中,专业版是收费的,可以免费试用 30 天;而社区版是完全免费的。

强烈建议初学者使用社区版,更重要的是,该版本不会对学习 Python 产生任何影响。

根据图 2 所示点击“下载”按钮,等待下载完成。下载完成后,读者会得到一个 PyCharm 安装包(本节下载的是 pycharm-community-/python/")

说明单行代码的功能时一般将注释放在代码的右侧,例如:

对于前两行代码,Python 没有将这里的三个引号看作是多行注释,而是将它们看作字符串的开始和结束标志。

对于第 3 行代码,Python 也没有将井号看作单行注释,而是将它看作字符串的一部分。

给代码添加说明是注释的基本作用,除此以外它还有另外一个实用的功能,就是用来调试程序。

举个例子,如果你觉得某段代码可能有问题,可以先把这段代码注释起来,让 Python 解释器忽略这段代码,然后再运行。如果程序可以正常执行,则可以说明错误就是由这段代码引起的;反之,如果依然出现相同的错误,则可以说明错误不是由这段代码引起的。

在调试程序的过程中使用注释可以缩小错误所在的范围,提高调试程序的效率。

和其它程序设计语言(如 、C 语言)采用大括号“{}”分隔代码块不同, 采用代码缩进和冒号( : )来区分代码块之间的层次。

在 Python 中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始,而缩进的结束则表示此代码块的结束。

注意,Python 中实现对代码的缩进,可以使用空格或者 Tab 键实现。但无论是手动敲空格,还是使用 Tab 键,通常情况下都是采用 4 个空格长度作为一个缩进量(默认情况下,一个 Tab 键就表示 4 个空格)。

例如,下面这段 Python 代码中(涉及到了目前尚未学到的知识,初学者无需理解代码含义,只需体会代码块的缩进规则即可):

但我们应尽量避免使用汉字作为标识符,这会避免遇到很多奇葩的错误。

标识符的命名,除了要遵守以上这几条规则外,不同场景中的标识符,其名称也有一定的规范可循,例如:

  • 当标识符用作模块名时,应尽量短小,并且全部使用小写字母,可以使用下划线分割多个字母,例如 game_mian、game_register 等。
  • 当标识符用作包的名称时,应尽量短小,也全部使用小写字母,不推荐使用下划线,例如 /python/" #将print作为变量名
}

装饰即修饰,意指为其他函数添加新功能

装饰器定义:本质就是函数,功能是为其他函数添加新功能

,是由python虚拟机来执行的,但是pyc的内容跟python的版本相关,不同的版本编译后的pyc文件不同,2.5编译的pyc文件不能到3.5上执行,并且pyc文件是可以反编译的,因而它的出现仅仅是用来提升模块的加载速度的。

1.模块名区分大小写,foo.py与FOO.py代表的是两个模块

2.你可以使用-O或者-OO转换python命令来减少编译模块的大小

3 由于一些程序可能依赖于assert语句或文档字符串,你应该在在确认需要的情况下使用这些选项。

3.在速度上从.pyc文件中读指令来执行不会比从.py文件中读指令执行更快,只有在模块被加载时,.pyc文件才是更快的

4.只有使用import语句是才将文件自动编译为.pyc文件,在命令行或标准输入中指定运行脚本则不会生成这类文件,因而我们可以使用compieall模块为一个目录中的所有模块创建.pyc文件

python提供了一个标准模块库,一些模块被内置到解释器中,这些提供了不属于语言核心部分的操作的访问,但它们是内置的,无论是为了效率还是提供对操作系统原语的访问。这些模块集合是依赖于底层平台的配置项,如winreg模块只能用于windows系统。特别需要注意的是,sys模块内建在每一个python解释器

这俩只在命令行有效,得出的结果,标识了解释器是在交互式模式下。

变量sys.path是一个决定了模块搜索路径的字符串列表,它从环境变量PYTHONOATH中初始化默认路径,如果PYTHONPATH没有设置则从内建中初始化值,我们可以修改它

os一种好的处理路径方式

内建函数dir是用来查找模块中定义的名字,返回一个有序字符串列表

如果没有参数,dir()列举出当前定义的名字

无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法

包的本质就是一个包含__init__.py文件的目录。
包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间

1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。

2.对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。

我们在与包glance同级别的文件中测试

需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:from a import b.c是错误语法

我们在与包glance同级别的文件中测试

不管是哪种方式,只要是第一次导入包或者是包的任何其他部分,都会依次执行包下的__init__.py文件(我们可以在每个包的文件内都打印一行内容来验证一下),这个文件可以为空,但是也可以存放一些初始化包的代码。

在讲模块时,我们已经讨论过了从一个模块内导入所有*,此处我们研究从一个包导入所有*。

此处是想从包api中导入所有,实际上该语句只会导入包api下__init__.py文件中定义的名字,我们可以在这个文件中定义__all___:

2.6 绝对导入和相对导入

我们的最顶级包glance是写给别人用的,然后在glance包内部也会有彼此之间互相导入的需求,这时候就有绝对导入和相对导入两种方式:

绝对导入:以glance作为起始

相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)

测试结果:注意一定要在于glance同级的文件中测试

注意:在使用pycharm时,有的情况会为你多做一些事情,这是软件相关的东西,会影响你对模块导入的理解,因而在测试时,一定要回到命令行去执行,模拟我们生产环境,你总不能拿着pycharm去上线代码吧!!!

特别需要注意的是:可以用import导入内置或者第三方模块,但是要绝对避免使用import来导入自定义包的子模块,应该使用from... import ...的绝对或者相对导入,且包的相对导入只能用from的形式。

比如我们想在glance/api/versions.py中导入glance/api/policy.py,有的同学一抽这俩模块是在同一个目录下,十分开心的就去做了,它直接这么做

没错,我们单独运行version.py是一点问题没有的,运行version.py的路径搜索就是从当前路径开始的,于是在导入policy时能在当前目录下找到

但是你想啊,你子包中的模块version.py极有可能是被一个glance包同一级别的其他文件导入,比如我们在于glance同级下的一个test.py文件中导入version.py,如下

12 这必然是找不到的
}

我要回帖

更多关于 m98调用子程序实例 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信