赞
踩
Now is better than never,
Although never is often better than right now.
这是“Python之禅”中的一句话,意思是做也许好过不做,但不假思索就动手,还不如不做。的确,在开始学习Python之前,初学者需要先了解一些关于这门编程语言的背景知识,并在计算机上做好准备工作。
关于Python,很多教科书都把它定义为动态的、强类型的编程语言。作为初学者,大可不必深究什么是动态语言,什么是强类型语言,但必须知道的是,Python是支持面向对象编程的脚本语言,同时也原生支持面向过程式编程的范式。
这里,我绝非有意搬出面向对象和面向过程式编程的概念来给初学者一个下马威,而是因为这两个概念对于程序员来说非常重要,即便是新手也要有所了解。所谓面向过程式编程,就是根据解决问题所需要的步骤,用函数一步一步实现,最后依次调用这些函数。面向过程式编程符合人类的思维特点,容易理解,而面向对象编程就要比它抽象复杂得多。如果初学者理解面向对象编程有困难,也不用急于求成。很多概念都是在长期的编程实践中逐步建立起来的,一切都是自然而然的。
此外,初学者还需要知道,Python是脚本语言。与脚本语言相对的是编译型语言,如C语言和C++语言都属于编译型语言。编译型语言需要经过编译器编译连接之后才能运行,而脚本语言的运行则需要一个解释器而非编译器。我们常说在计算机上安装了某一个版本的Python,指的就是Python的解释器。初学者往往搞不清楚解释器和编译器分别是什么,甚至把集成开发工具理解为解释器或编译器。请务必记住,Python解释器就是一个可执行程序,运行Python代码就是在运行Python解释器,这个解释器将逐行解释、执行代码。
Python有多种发行版,其中最有影响力的是官方的CPython版本。我们平时所说的Python,如果没有特别说明,就是指CPython。CPython利用C语言编写而成,是最具广泛兼容性与标准化的Python实现方案。
值得一提的是,CPython解释器有一个替代品PyPy,其可以利用即时编译(JIT)来加速Python程序的执行。PyPy JIT将Python代码编译为机器语言,从而带来平均7.7倍于CPython的运行速度。在某些特定任务中,其提速效果可达50倍。一般情况下,Python代码都可以不加修改地在PyPy环境下运行,但不能保证和CPython环境下的运行结果完全一致。毕竟,PyPy在垃圾回收机制等方面完全不同于CPython。
Anaconda是影响力仅次于CPython的另一个发行版。Anaconda基于CPython,集成了大量常用的Python模块,尤其是数据科学类的模块。Anaconda还提供了一套模块管理工具,可以构建多个相互独立的开发环境。
早期的Python语言一直缺少一个方便易用的模块安装及管理工具,模块资源也极为匮乏,模块的安装和升级曾经是非常令人头疼的大问题。在这个背景下,以提供模块管理服务为特点的Anaconda得以大行其道。现在,Python有了pip这样的模块安装和管理利器,Anaconda的优势自然就不存在了。我个人认为Anaconda的模块管理和开发环境管理,非但没有让事情变得简单,反而给初学者带来了更多的困惑。当然,这只是我的个人观点,如果你确实喜欢使用Anaconda,我也完全认同并尊重你的选择。
除了Anaconda,其他的Python发行版基本上都是针对某一种编程语言设计的运行时(Runtime),如基于JVM的Jython、基于.net的IronPython等。不过,Jython和IronPython目前都没有推出Py3的版本。
首先从Python的官方网站下载安装程序。下载时,读者需要根据自己的操作系统类型、硬件参数等信息选择合适的版本。如果是出于学习的目的,下载任何一个版本都没有问题;如果是用于工作项目,则需要考虑项目所依赖的第三方模块是否支持最新版本的Python。
以在Windows平台安装Python为例,下载完安装程序,运行时会出现图1-1所示的安装提示。推荐使用默认方式安装,同时不要忘记勾选界面最下面的两个复选框,否则可能会给后续的使用和模块维护带来一些麻烦。
图1-1 安装Python
安装完成后,可以在Windows开始菜单的Python程序组中看到IDLE应用程序。这是Python内置的集成开发工具,既可以交互式运行代码,也可以编辑、运行Python的脚本文件。本书的大部分代码都是以交互方式在IDLE上运行的。IDLE的运行界面如图1-2所示。
图1-2 Python内置的开发工具IDLE
在Python的程序组中还有一个工具(工具名为Python),它可以直接运行Python解释器,类似于在一个命令行窗口中运行python.exe程序。在这个工具的窗口中,只能以交互方式运行Python语句,不能运行脚本文件。我习惯把这个工具叫作Shell,不过,Python的开发者们把Shell这个名字写在了IDLE程序界面的标题栏上。
如果Python解释器损坏或需要一个更高版本的解释器,就需要卸载当前版本的Python,安装新版本的Python,而不是像大多数软件那样可以直接升级到最新版本。这是因为Python的第三方模块大多都依赖特定版本的Python解释器,如果升级Python解释器,将会导致所有依赖当前版本Python解释器的第三方模块不可用。
解释型语言的优势是可以写一句,执行一句,想到哪儿,写到哪儿,而不必像编译型语言那样,需要把程序全部写完、编译成功后才能运行。在以交互方式运行Python代码的过程中,可以随时查看各个对象的类型和属性,以便判断当前编写的代码是否在正确的方向上。
我特别喜欢使用Python的IDLE这个交互式工具,经常在IDLE中验证代码的写法是否正确,甚至在IDLE中对项目的设计思路做原型验证。
IDLE支持Tab键自动补齐,这个功能可以用来学习一个新的模块,查看模块里面对象的方法和属性。还有两个技巧,有助于使用IDLE:将光标移动到执行过的语句上按回车键,可以重复这个语句;使用下划线(_)可以代替最后一次执行结果。
下面的代码演示了在IDLE中以交互方式连接数据库、查询数据的例子。对于初学者来说,这几行代码读起来会比较吃力。没有关系,这里仅仅是一个演示,后面会对这些代码进行详细讲解。
- >>> import pymysql
- >>> import pymysql.cursors as cursors
- >>> db = pymysql.connect(host='localhost', port=3306, db='photo', user='xufive',
- passwd='123')
- >>> cursor = db.cursor()
- >>> cursor.execute('select * from album')
- 1
- >>> cursor.fetchall()
- ((1, 0, '烟花三月江浙行', datetime.date(2018, 4, 22), '', '2018年4月15日-20日,
- 陪同友人游历扬苏杭宁,全程自驾'),)
实际上,IDLE也是一个集成开发工具,可以用来创建或打开.py脚本文件,并对脚本进行编辑、运行和调试。IDLE的Run和Debug菜单包含运行和调试脚本的相关功能;另外,在Options菜单中还可以设置IDLE的配色方案、字体字号等,如图1-3所示。
图1-3 使用IDLE编辑、运行脚本文件
IPython是一个Python的交互式Shell,比默认的Python Shell功能更强大,支持变量自动补全、自动缩进,以及bash shell命令,内置了许多很有用的功能和函数。不过,IPython没有被包含在Python内,而是作为Python的第三方模块,需要单独安装。在一个命令行窗口中执行下面的模块安装命令,即可安装IPython模块。pip命令在本书的1.4节有详细讲解。
PS C:\Users\xufive> pip install ipython
安装完成后,在命令行窗口运行ipython.exe,即可启动IPython。和Python IDLE相比,IPython更注重显示格式的美观,还显式地标识出了输入和输出代码。
- In [1]: import time
-
- In [2]: time.time()
- Out[2]: 1590045124.9188404
-
- In [3]: time.ctime()
- Out[3]: 'Thu May 21 15:12:14 2020'
-
- In [4]: import numpy as np
-
- In [5]: np.random.random((3,5))
- Out[5]:
- array([[0.23292967, 0.38575244, 0.46754979, 0.98790885, 0.56897344],
- [0.82938645, 0.78006211, 0.56846771, 0.33283862, 0.04979372],
- [0.82451171, 0.02402506, 0.93307935, 0.49472482, 0.44523031]])
为代码提供美观的格式,不是IPython唯一的优点,让IPython名扬天下的是依赖IPython运行的Jupyter。Jupyter是一个可以编写漂亮的交互式文档的强大工具。
以交互方式运行Python代码是低效的,仅适用于语法学习或代码验证。大多数情况下,程序员是在编辑器或集成开发工具中完成以.py为扩展名的脚本文件,然后调用解释器逐行解释、执行这个脚本文件。
如果你习惯使用纯粹的编辑器(如Vim或Notepad++等)写代码,那就需要手工运行和调试代码。以Windows平台为例,运行代码分成两步。
第一步,打开一个命令行窗口,将路径切换到脚本文件所在的文件夹。我习惯在脚本文件所在窗口的空白位置(确保没有选中任何对象),按下Shift键并单击鼠标右键,在弹出的菜单中选择“在此处打开Powershell窗口”,如图1-4所示。
图1-4 在命令行窗口中运行脚本文件
第二步,在打开的Powershell窗口中输入python+空格+脚本文件名,按回车键即可运行代码。输入脚本文件名时,按Tab键可以自动补齐。脚本的运行信息、错误信息、运行结果等都显示在这个窗口中。这些信息都是最原始的信息。在其他开发工具中看到的脚本的信息,都是对这些信息的再加工。
实际上,很多编辑器都支持自定义运行命令,可以实现一键运行Python脚本。如果你习惯使用PyCharm或VSCode等集成开发工具,运行脚本就更简单了,甚至可以在开发工具中配置多个Python运行环境。
通常集成开发工具会提供强大的调试工具,熟练运用该工具,很容易定位到错误的代码,可以极大地提高调试效率。如果习惯使用编辑器做开发,或不熟悉集成开发工具的调试工具,手工调试代码的手段不多,大概只能用print( )函数查看调试信息。好在Python有一个内置的调试模块pdb,它可以提供包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态赋值等多种调试手段。
pip是Python目前最流行、最方便的包管理工具。早期的Python使用setup.py安装模块,比较麻烦。很多程序员都曾经用过把模块文件直接放进Python安装路径下的Lib\site-packages文件夹的“暴力”安装法。后来稍微进步了一点,使用easy_install工具,模块文件的扩展名是.egg。再后来,终于进化到了pip时代,对应的模块文件变成whl文件,甚至GitHub上的zip文件也可以直接安装。
使用pip工具有两种方式:一种是运行pip.exe可执行程序;另一种是调用Python解释器,把pip模块当成脚本来运行。以安装NumPy模块为例,两种使用方式的命令如下。
- pip install numpy
- python -m pip install numpy
第一种方式的命令里,pip指的是pip.exe程序。如果尝试在计算机上安装多个版本的Python,安装程序一般会自动(也可以手动)将pip.exe程序复制并在文件名中加入版本信息。图1-5是我的计算机上Python3.7默认安装路径下的pip.exe程序和两个副本的名字。无论使用pip还是pip3,又或者是pip3.7,都能正确安装模块。
图1-5 安装工具pip.exe在默认安装路径下的名字
和第一种方式相比,第二种方式的安装命令前面多了python -m。这里的python指的是python.exe程序,也就是Python解释器;-m是Python解释器的参数,用来说明解释器运行的不是脚本文件,而是把pip模块当作脚本来运行。pip模块位于Python的安装路径下,Python解释器会找到它。
在安装了多个Python版本的系统中,以第二种方式使用pip工具,只要能正确调用解释器,就不容易出错。如果用第一种方式安装模块失败,不妨试试第二种方式。
安装模块使用install子命令。这个子命令支持很多的选项,其中最常用的参数是-U,它表示将指定的模块升级到最新的可用版本。
pip install numpy -U
安装子命令默认从https://pypi.org/simple下载模块文件,使用-i参数可以指定下载的镜像源。下面的安装命令分别使用了清华大学资源站、阿里云资源站、中科大资源站作为下载的镜像源地址。
- pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/
- pip install numpy -i https://mirrors.aliyun.com/pypi/simple/
- pip install numpy -i https://pypi.mirrors.ustc.edu.cn/simple/
安装模块时,还可以使用两个等号(==)指定模块的版本。
pip install numpy==1.15.0
使用install子命令还可以安装本地whl文件,甚至是GitHub上的zip文件。下面两个命令分别安装了basemap模块和pyinstaller模块的开发版。
- pip install basemap-1.2.0-cp37-cp37m-win_amd64.whl
- pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
卸载模块使用uninstall子命令。这个子命令比较简单,只有-r和-y两个选项,前者指定卸载依赖包,后者跳过卸载确认。请谨慎使用这两个选项。
pip uninstall numpy
查看模块列使用list子命令。这个子命令支持的选项较多,如使用-o参数可以列出过时的模块,使用-u参数可以列出最新的模块。下面是使用-o参数的显示结果。
- PS C:\Users\xufive> pip list -o
- Package Version Latest Type
- ------------------ ----------- ----------- -----
- altgraph 0.16.1 0.17 wheel
- arch 4.13 4.14 wheel
- beautifulsoup4 4.8.2 4.9.1 wheel
- ......
使用show子命令可以查看指定模块的信息。下面是以NumPy模块为例显示的信息。
- PS C:\Users\xufive> pip show numpy
- Name: numpy
- Version: 1.18.2
- Summary: NumPy is the fundamental package for array computing with Python.
- Home-page: https://www.numpy.org
- Author: Travis E. Oliphant et al.
- Author-email: None
- License: BSD
- Location: c:\users\xufive\appdata\local\programs\python\python37\lib\site-packages
- Requires:
- Required-by: xgboost, wxPython, tables, statsmodels, seaborn, scipy, scikit-learn,
- pyamg, patsy, pandas, opencv-python, numexpr, netCDF4, matplotlib, imageio, h5py,
- cftime, basemap, arch
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。