python学习笔记04-python模块

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这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的authorname就是特殊变量,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)

猜你喜欢

转载自blog.csdn.net/ybf326/article/details/83514338