【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字符串