1.介绍
一个.py文件就称之为一个模块(Module)
Python按目录来组织模块——包(Package)
每一个包目录下必须有一个init.py的文件,可以是空文件,也可以有Python代码。因为init.py本身就是一个模块,而它的模块名就是包名。
2.第一个模块
任何模块代码的第一个字符串都被视为模块的文档注释
sys模块有一个argv变量,用list存储了命令行的所有参数。argv至少有一个元素,因为第一个参数永远是该.py文件的名称#!/usr/bin/env python # -*- coding: utf-8 -*- #文档注释 'a test module' #特殊变量,声明作者 __author__ = "ybf326" #导入sys模块 import sys def test(): #利用sys模块的argv方法,获取所有参数(包括运行的py脚本文件名) args = sys.argv if len(args)==1: print 'Hello,world!' elif len(args)==2: print 'Hello,%s!' % args[1] else: print 'Too many arguments!' #判断如果是直接运行这个文件,则__name__为__main__,于是执行test方法 if __name__=='__main__': test()
3.别名
#!/usr/bin/env python # -*- coding: utf-8 -*- 'a test module' __author__ = "ybf326" try: #导入cStringIO模块,取别名为StringIO import cStringIO as StringIO print 'cStringIO' except ImportError: # 导入失败会捕获到ImportError #当系统平台上没有提供cStringIO模块,就使用StringIO模块代码 import StringIO print 'StringIO'
4.作用域
类似xxx这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的author,name就是特殊变量,hello模块定义的文档注释也可以用特殊变量doc访问,我们自己的变量一般不要用这种变量名
类似xxx和xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如abc,__abc
之所以我们说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。
5.安装第三方模块
在Python中,安装第三方模块,是通过setuptools这个工具完成的。Python有两个封装了setuptools的包管理工具:easy_install和pip。目前官方推荐使用pip。
一般来说,第三方库都会在Python官方的pypi.python.org网站注册,要安装一个第三方库,必须先知道该库的名称,可以在官网或者pypi上搜索,比如Python Imaging Library的名称叫PIL,因此,安装Python Imaging Library的命令就是:pip install PIL
有了PIL,处理图片易如反掌。随便找个图片生成缩略图:
>> import Image >> im = Image.open('test.png') >> print im.format, im.size, im.mode PNG (400, 300) RGB >> im.thumbnail((200, 100)) >> im.save('thumb.jpg', 'JPEG')
其他常用的第三方库还有MySQL的驱动:MySQL-python,用于科学计算的NumPy库:numpy,用于生成文本的模板工具Jinja2,等等
6.模块搜索路径
默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中
>> import sys >> sys.path ['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib/python2.6/site-packages']
如果我们要添加自己的搜索目录,有两种方法:
一是直接修改sys.path,添加要搜索的目录。这种方法是在运行时修改,运行结束后失效。>> import sys >> sys.path.append('/Users/michael/my_py_scripts')
第二种方法是设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。
7.使用future
Python提供了future模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中测试一些新版本的特性
#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import unicode_literals print '\'xxx\' is unicode?',isinstance('xxx',unicode) print 'u\'xxx\' is unicode?',isinstance(u'xxx',unicode) print '\'xxx\' is str?',isinstance('xxx',str) print 'b\'xxx\' is str?',isinstance(b'xxx',str)