【Python学习笔记】第3章 你应如何运行程序

这一章主要讲:如何启动Python程序、如何交互地输入代码、代码的各种运行方式。

交互式命令行模式

开始一个交互式会话

在终端中,输入python


我们就开启了会话。结束会话按Ctrl+Z:

系统路径

如果我们要在终端中,输入python就可以启动,那么就需要设置环境变量PATH使其包含安装的python路径,否则就需要输入完整的路径。

我们也可以在终端中输入 cd <python的安装路径>来跳转。

Python 3.3中的新Windows选项:PATH和启动器

从Python3开始,Windows安装程序有一个选项,在选中时能够使Python 3.3的目录自动添加到PATH,这样我们就不用手动地添加了。

Python 3.3自带了一个新的能自动安装地Windows启动器。

运行的位置:代码目录

我们可以自由地在任何位置通过新建文件夹创建目录,并把它作为代码运行的目录。

不需要输入的内容:提示符和注释

交互模式下,Python中的>>>...字符用于提示用户在它们后面输入内容。在.py文件中编程时不需要加上。


#后面是注释,解释器运行时自动忽略。

交互地运行代码

交互模式下,我们可以不断地向python输入命令,每一条命令在回车后立即执行。

为什么要使用交互式命令行模式

实验

我们可以在交互环境下,输入自己不清楚的表达式。

测试

我们也可以在交互环境下,测试已经写入文件的地方。

使用注意:交互命令行模式

  • 只能输入Python命令
  • print语句仅在文件中必须
  • 不需要缩进
  • 留意复合语句下的提示符变化:在提示你输入复合语句时,提示符为...
  • 用一个空行结束复合语句
  • 一次运行一条语句

系统命令行文件

交互式的缺点:写出来的程序不会保存。要永久保存程序,需要在文件中写入代码,这个文件叫做模块。运行模块文件时,python从头到尾执行文件中的代码。

第一段脚本

我们创建新的.py文件并在文本编辑器(这里用VSCode)中对其写入下面代码:


代码的含义会在以后的章节中解释。

使用命令行运行文件

我们在终端中,把路径切换到上述文件所在的路径,并输入python script1.py,得到:

不同的命令行使用方式

我们可以运行程序,将其输入到指定文件上:

得到:


这种操作称为重定向。

使用py命令(即之前提到的Windows启动器)也有同样的效果,且不要求PATH设置。否则需要输入完整路径。

使用注意:命令行和文件

  • 在Windows的默认记事本上,创建新的文件需要修改后缀(默认为.txt)。如果看不到后缀,可以在文件资源管理器找到“查看”,选择文件夹选项,再勾选“显示文件扩展名”。
  • 在系统命令行模式下,使用文件扩展名和目录路径,但在使用import时别使用它们
  • 在文件中使用print语句

UNIX风格可执行脚本:#!

UNIX 脚本基础

在python源文件的第一行加上:

#!usr/local/bin/python

就是解释器的路径。操作系统使用它来找到解释器并运行代码。

UNIX env查找技巧

要避免在脚本文件中硬编码Python解释器的脚本路径,可以这么写:

#!usr/bin/env python

env通过系统的搜索路径的设置定位Python解释器,使代码更具有可移植性。

Python 3.3 Windows启动器:Windows也有#!了

点击文件图标

图标点击基础知识

点击Python程序文件,就可以让Python运行这个文件。

在Windows点击图标

我们可以注意到,.py文件的图标是白色的,.pyc文件的图标是黑色的。

Windows上输入的技巧

单击Python文件后,有时会出现一个窗口然后迅速消失,这是因为Python解释的速度非常快,一瞬间就执行完了。为了看清效果,可以在程序文件的末尾处加一个:

input()

其他图标点击的限制

如果程序有错误,那么极有可能看不到,因为Python解释器会在打印错误信息后终止。为了解决这个问题,应当学会写一些代码来截取错误。

模块载入和重载

载入和重载基础知识

每一个.py的Python源代码文件都是一个模块,导入操作本质上就是载入一个文件,并给予读取那个文件内容的权限。这么设计的出发点是:大的Python程序往往由多个模块组成。

比如,我们可以在交互对话下输入载入模块指令import,但每次会话只能导入一次,这是因为,导入的开销非常大。

如果想再次导入,需要以下操作(由于我使用的是Python3,故弹出警告):

模块的宏观视角:属性

简单地说,属性就是绑定在特定对象(这里是模块)的变量名。如下图,模块myfile有一个属性是title

可以直接导入模块,在使用模块中的属性,使用方法:<模块名>.<属性>


也可以直接从模块导入属性,语法是:from <模块> import <属性>

总之,上面两种方法都会使myfile.py得以执行,并获得在文件顶层赋值的变量名的访问权。

我们可以用函数dir()获取模块内部的可用的全部变量名。


注意到以双下划线开头的变量名,它们是由Python预定义的内置变量名。

使用注意:import和reload

reload是不可传递的,这是因为它不会重载该模块导入的任何模块。

使用exec运行模块文件

exec类似于import,相当于“粘贴代码”,这意味着模块中的内容会覆盖掉一些变量的值。

IDLE用户界面

我用的是PyCharm,就不记这个了吧……(T v T)

其他IDE

  • Eclipse、PyDev
  • Komodo
  • NetBeans IDE Python版
  • PythonWin
  • Wing
  • Visual Studio Code
  • PyCharm

其他启动选项

嵌入式调用

在C/C++程序中运行Python字符串

冻结二进制可执行文件

文件编辑器启动方式

其他的启动方式