注:本系列内容系廖雪峰老师Python教程的学习笔记
本文主要内容包括以下三个内容:
Python中的模块
Python内置了很多有用的模块,这些模块在你安装Python后即可使用。
示例:使用Python自带
sys
模块,编写一个hello
模块#!/usr/bin/env python3 # -*- coding:utf-8 -*- 'a test module' __author__='Fanyu' import sys def test(): args=sys.argv if len(args)==1: print('Hello,World!') if len(args)==2: print('Hello,%s!' % args[1]) else: print('Too many arguments!') if __name__=='__main__': test()
我们对上面的代码做出解释:第一行和第二行是标准注释,第一行注释可以让这个名为
hello.py
的文件直接在Unix/Linux/Mac
上直接运行,第二行注释表示.py
文件本身使用UTF-8编码。第四行是模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释。第六行使用__author__
变量把作者的信息加入。这些信息都属于额外的信息,可以删掉不写。后面开始就是模块的主要内容。使用一个模块的第一步,就是导入该模块,如:
import sys
sys
模块有一个argv
变量,用list
储存了命令行的所有参数。argv
中至少有一个元素,因为第一个元素即是.py
文件的名称。我们来运行上面的代码,在命令行输入
python hello.py
C:UsersfanyuDesktopPYTHON>python hello.py Hello,World! C:UsersfanyuDesktopPYTHON>python hello.py Hello Hello,Hello!
可见,在没有任何参数的情况下,其执行了
args==1
的情况,也就是说此时有一个参数hello.py
,在加了一个Hello
参数的情况下,程序执行了args==2
的情况。现在我们来看最后一行的
if
语句,这条语句表示,在命令行执行该模块时,Python解释器会把__name
属性赋值为__main__
,而在其他地方导入hello
模块时则if语句会判断失败,即:不执行test()
函数。这种if测试可以让一个模块通过命令行运行时执行一些额外的代码。,最常见的即是运行测试。我们来看效果:
1.首先在命令行执行如下命令
C:UsersfanyuDesktopPYTHON>python hello.py Hello,World!
2.然后启动Python交互环境导入
hello
模块C:UsersfanyuDesktopPYTHON>python Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import hello >>>
可见,导入时没有打印任何信息,也就是说
hello
模块没有执行test()
函数,要调用才会执行test()
:>>> hello.test() Hello,World!
作用域
- 在一个模块中,我们可能会定义很多函数和变量,有的函数和变量我们希望提供给别人使用,但有的我们仅希望在模块内部供自己使用。Python通过
_
前缀来实现该功能。
- 正常的函数名和变量是公开的(
public
),可以被直接引用,比如:abc
,x123
,PI
等。 - 类似
_author_
,_name
这样的变量是特殊变量,可以被直接引用,但有特殊用途。 - 类似
_xxx
,__xxx
这样的函数或者变量是非公开的(private
),不应该被直接引用。
- 正常的函数名和变量是公开的(
安装第三方模块
在Python中,安装第三方模块通过包管理工具
pip
完成。安装
pip
:在命令行运行pip
,若打印信息提示找不到命令,那么你需要安装,反之不用。安装pip
起始很简单,在当初安装python的时候就会默认安装,如果你发现你的没有,那么进行以下操作:1.重新安装python并确保在安装时勾选了
pip
选项2.安装好之后确保配置了python环境变量。
当安装并确保
pip
命令可行之后,让我们来安装一个第三方库,一般来说,第三方库都会在Python官方的Python第三方库网站注册,当知道库的名称后,你就可以进行安装。首先进入上面的网站,选择或者搜索你想要安装的库,这里我们以Python下强大的Python Imaging Library–Pillow库为例,来进行安装,在命令行输入:pip install Pillow
此时系统就会开始下载,等待系统下载并安装完成,然后,我们来进行测试。
示例:图片生成缩略图
>>> from PIL import Image >>> im=Image.open('test.jpg') >>> print(im.format,im.size,im.mode) JPEG (660, 439) RGB >>> im.thumbnail((200,100)) >>> im.save('thumb.jpb','JPEG')
找一张你喜欢的图片试试吧!
其他常用的第三方库还有MySQL的驱动:mysql-connector-python
,用于科学计算的Numpy库:numpy
,用于生成文本的模板工具Jinja2
等等。其他常用的第三方库还有MySQL的驱动:
mysql-connector-python
,用于科学计算的Numpy库:numpy
,用于生成文本的模板工具Jinja2
等等。模块搜索路径
当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py
文件,如果找不到就会报错。默认情况下Python解释器会搜索当前目录,所有已安装的内置模块和第三方模块,搜索路径存放在sys
模块的path
变量中:
>>> import sys
>>> sys.path
['', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\python36.zip', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\DLLs', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\lib', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\lib\site-packages']
如果要添加自己的搜索路径,有两种方式:
1.直接修改sys.path
>>> import sys
>>> sys.path.append('your path')
>>> sys.path
['', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\python36.zip', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\DLLs', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\lib', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\lib\site-packages', '', 'your path']
这种方法的特点是添加简便,但是只在本次运行时有效。
2.设置环境变量PYTHONPATH
,将你要添加的路径添加到上述环境变量中,python就会将其添加到sys.path
中,且始终有效。