这篇文章主要介绍了python程序的执行顺序,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。
从实现方式上看,python是一个名为解释器的软件包。解释器是一种让其他程序运行起来的程序Python中的所有运算符号。当编写一段python程序,Pyhton解释器将读取程序,并按照其中的命令执行,得出结果。实际上,解释器是代码与机器的计算机硬件之间的软件逻辑层。Python安装包至少包含一个解释器和一套支持库。
程序执行
从程序员的视角来看,Python程序是一个包含Python语句的文本文件。按照惯例,Python文件是以.py结尾的,这种命名方案在被“导入”时才是必需的,但绝大多数Python文件为了统一都是以.py命名的。
从python视角来看,python内部执行流程:第一步编译成所谓的“字节码”,之后将其转发到所谓的“虚拟机”(PVM)中。
字节码是一种低级的、与平台无关的表现形式,概括地说,Python通过把你的每一条源语句分解为单一步骤来翻译成一组字节码指令,可以提高执行速度。如果Python进程在机器上拥有写入权限,那么它将程序的字节码保存为一个以.py为扩展名的文件。在Python3.2以及之后的版本,Python将.py字节码存储在名为__pycahe__的子目录中,这个子目录位于与源文件相同的路径下。注意源文件的修改和Python版本的变化都会触发新的字节码文件的编译。
一旦程序编译成字节码,之后的字节码发送到通常称为Python虚拟机(PVM)的程序上来执行。PVM是Python运行时的引擎,它时常表现为Python系统的一部分,并且是实际运行脚本的组件。
1 介绍
python是一个面向对象的脚本语言,将面向对象的支持和全面的面向脚本语言的角色融合在一起。
python有如下优点:面向对象,免费,可移植,功能强大(丰富的工具集使python介于传统的脚本语言和系统语言之间,工具集包括动态类型),可混合(能与C\C++写成的库文件混合起来),简单易用。
Cpython是python语言实现的三大方式之一,是原始的、标准的实现方式。Jpython能与java语言集成,是python语言的替代实现方式。Jpython包含的java类可编译python源代码,形成java字节码。第三个实现方式是ironpython,可让python程序能与.net框架和Linux编写Mono编写的应用程序相集成。
py2exe(windows下使用)可生成冻结二进制文件(Frozen Binary),能够将程序的字节码、PVM以及任何程序所需要的python支持文件捆绑成一个单独的可执行的二进制程序。
2、运行Python程序的方式
交互式命令行模式
最简单的运行python程序的办法是在python交互命令行中输入程序,在命令提示符中输入python或者在“运行”的对话框中输入亦或者启动IDLE的主窗口,都可开启一个交互的python会话。按下回车键立即执行。ctrl+z:退出python的shell窗口。ctrl+D退出IDLE GUI和UNIX系统下的Python会话。
>>>print('hello world!')
>>>2**8
解释:在python3中,print是一个函数调用,但在python2不是。由于交互式自动打印输入表达式的结果,在这个提示模式下,往往不需要输入“print”。
作用:用于体验语言和测试程序;缺点:在交互模式下输入代码,执行完后会立即消失,是不会保存在一个文件中,所以为了重新运行,不得不从头开始输入。这时,为了保存程序,需要在文件中写入代码,这样的文件通常叫做模块。
使用交互提示模式需要注意以下事项:
- 不需要在交互式下输入完整的打印语句,而在文件中打印语句是必须的。
- 在交互提示模式下不需要缩进,否则会出现“SyntaxError”的信息。
- 留意提示符
,
的变换和复合语句(多行语句)。必须两次按下enter键才能运行一条复合语句,这会多出一条空行。每次只能运行一条语句:必须两次按下enter键才能运行一条循环或者其他的多行语句。这意味着不能在交互中复制并粘贴多行代码,除非这段代码的每条复合语句的后面包含空行。
- 在shell命令行中,多行语句的第二行需要手动缩进,而在IDLE中,它是自动缩进的。
在IDLE的命令行中快捷键的使用:ALT+P:回滚上一条命令;Alt+N:从头查找命令
windows交互式对话环境中,可以使用方向键重新调用使用过的命令
>>>for x in 'spam':
... print(x)
...
python脚本
用文本编辑器打开,如IDLE编辑器,Notepad等等。#符号之后是注释,可自成一行或者放在代码的右边。
方法一:IDLE是一个能够编辑、运行、浏览和调试python程序的GUI。它是python3.X\Lib\idlelib中的一个脚本idle.py。打开IDLE后,点击File选择new file,这是出现编辑器窗口,输入代码保存为new3.py。然后点击Run选择Run Module,结果会出现在shell窗口中。或者点击File选择open一个已经存在的文件
# 导入模块
import sys
print(sys.platform)
print(2**100)
x='Spam!'
print(x*8)
方法二:系统命令行:用notepad编辑好的.py文件,在当前目录下按下shift+鼠标右键,选择进入powershell,输入python xx.py。如果想产生pyc文件,可以使用python -m xx命令。
- 如果你的Path没有包含python的目录,并且python和你的脚本文件都没有位于你所工作的目录中,那么这对两者都使用完整路径。
- 在系统提示模式下使用文件扩展名,但是在导入时不能使用文件扩展名,如import sys。
方法三:直接点击py文件,打开方式选择python.exe,dos终端窗口一闪而过,可在代码后加上input()。局限性:如果在input()之前就有错误,错误信息会显示在窗口中,但也只是一闪而过,所以对input()调用也无济于事。
注意:在window中,还有一个完全阻止弹出DOS终端窗口的方法。以pyw为扩展名的文件只显示由脚本构建的窗口,而不是默认的dos窗口。pyw文件是拥有这种特别的窗口操作行为的py文件,他们常用于python编辑的用户界面,和其他各种技术一起使用,把打印完成的输出和错误保存到文件中。
模块导入和重载
模块:每一个以扩展名py结尾的python源文件。其他文件可以通过导入一个模块读取这个模块的内容。往往更大的程序以多个模块文件的形式出现,其中的一个模块文件被设计为主文件,或叫做顶层文件(就是那个启动之后能够运行整个程序的文件)
同一会话中导入操作只能进行一次,如进入python的shell窗口,输入import new3,会有结果,再次import new3,就没有结果了。
注意:new3文件必须在“pythonX.X”或者“pythonX.X\Lib\site-packages”路径之下。
关于导入的搜索路径设置
技巧1:添加系统PYTHONPATH变量:python模块的搜索路径(用来导入)
技巧2:在pythonX.X下创建文本mypath.pth文件,输入自己设定的搜索路径
也可以在同一会话中再次运行文件,需要调用importlib标准库模块中可用reload函数,该函数在python2中是内置函数,在python3不是。from语句可以直接从一个模块中复制一个名字,reload函数载入并运行文件最新版的代码,获得的参数是一个已经加载(import new3)了的模块对象的名称,返回的是一个python模块的对象,所以多出一行显示。
reload是不可传递的,重载一个模块的话只会重载该模块,而不能重载该模块所导入的任何模块,因此有时必须reload多个文件。
new4 模块文件中的属性如何载入呢?
方法一: 通过使用一个import语句将模块作为一个整体载入,并使用模块名后跟一个属性名来获取它。
>>> import new4
>>> print(new4.theme1)
The Meaning of life
>>>
方法二:通过from从模块文件中获取变量名
>>> from new4 import theme1
>>> print(theme1)
The Meaning of life
>>>
二者的区别是方法一模块整体载入,采用object.attribute属性引用的方式;方法二from仅复制模块的属性,以便属性成为接收者(theme1)的直接变量(副本),打破模块的名称空间分隔的限制,但这至少会导致在复制的变量上可能会重叠。
一般来说,python程序由多个模块组成,通过import语句连接在一起,每一个模块文件是一个独立的变量包,即命名空间,一个模块文件不能看到其他文件定义的变量名,除非它显式地导入那个文件,所以模块文件在代码文件中起到了最小命名冲突的作用。因为每一个文件都是一个独立完备的命名空间,即使在它们拼写相同的情况下,一个文件中的变量名是不会与另一个文件中的变量冲突的。
>>> import new4
The Meaning of life patriotism persistence
>>> dir(new4)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'theme1', 'theme2', 'theme3']
>>>
exec运行模块文件
使用exec运行模块文件,而不导入模块函数
exec(open('xxx.py').read())是从交互提示模式启动文件而不必导入以及随后的重载的一种方法,为内置函数调用。exec调用有着类似import的效果,但它技术上不会导入模块,默认情况下,每次以这种方式调用exec的时候,他都重新运行文件。因此exec不需要在文件修改后进行模块重载,它忽略了常规的模块导入逻辑。缺点是由于exec的工作机制像在调用的地方粘贴代码一样,与from一样有当前变量有被覆盖的危险。
注意:open的参数是文件路径,默认是在python3.X文件夹下,任意目录下的文件,可写成像 'D:\\\\programing\\\\python3.8\\\\workplace \\\\ new4.py'形式。
总结:本文主要介绍使用代码交互输入的方式,以不同方式启动保存在文件中的代码:在系统命令行中运行、import和exec,使用像IDLE这样的GUI等。
IDLE常用快捷键总结:
ALT+P:回滚上一条命令;Alt+N:从头查找命令
ctrl+D退出IDLE GUI。
ctrl+[:多行缩进;ctrl+]:多行后退
alt+3:多行注释
alt+4:取消多行注释