Python 模块

模块的优点:
(1)大大提高了代码的可维护性
(2)编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。
(3)避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。
:为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。
这里写图片描述
一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块。
现在,假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany。abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz。
请注意,每一个包目录下面都会有一个init.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。init.py可以是空文件,也可以有Python代码,因为init.py本身就是一个模块,而它的模块名就是mycompany
多级目录:
这里写图片描述
文件www.py的模块名就是mycompany.web.www,两个文件utils.py的模块名分别是mycompany.utils和mycompany.web.utils。
注意:自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。

#!/usr/bin/env python3  #文件直接可以在Unix/Linux/Mac上运行
# -*- coding:utf-8 -*-  #文件本身使用标准UTF-8编码
'a test module' #模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释
__author__='Han'  #作者
import sys #导入模块后,变量sys指向该模块,就可以访问该模块的所有功能

def test():
    args=sys.argv   #命令行的所有参数,第一个参数时该.py文件的名称(['package.py']) 输出Hello, world!
    if len(args)==1:
        print('Hello, world!')
    elif len(args)==2:  #调用时可以用 python package.py Han  输出 Hello, Han!
        print('Hello, %s!' % args[1]) 
    else:
        print('Too many arguments!')
#C语言定义主程序入口是main()函数,main代表了程序主入口,即和系统的接口(就是命令行直接调用)。
#if __name__=='__main__':   这句话的核心就是在判断该程序文件是否作为主程序入口。
#在命令行运行hello模块文件时,该文件作为主程序入口,Python解释器把一个特殊变量__name__置为__main__,
#如果在其他地方导入该hello模块时,该模块不是程序主入口,if判断将失败
#因此,这种if测试可以让一个模块通过命令行运行时(直接调用)执行一些额外的代码,#最常见的就是运行测试。
if __name__=='__main__':
    test()

变量的作用域
正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等;
类似xxx这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的authorname就是特殊变量,hello模块定义的文档注释也可以用特殊变量doc访问,我们自己的变量一般不要用这种变量名;
类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等;
之所以我们说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。

#private变量的使用:在模块里公开greeting()函数,而把内部逻辑用private函数隐藏起来了,
#这样,调用greeting()函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法,即:
#外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。
def _private_1(name):
    return 'Hello, %s' % name
def _private_2(name):
    return 'Hi, %s' % name
def greeting(name):
    if len(name)>3:
        return _private_1(name)
    else:
        return _private_2(name)

安装第三方模块
在Python中,安装第三方模块,是通过包管理工具pip完成的。
一般来说,第三方库都会在Python官方的pypi.python.org网站注册,要安装一个第三方库,必须先知道该库的名称,可以在官网或者pypi上搜索,比如Pillow的名称叫Pillow,因此,安装Pillow的命令就是:pip install Pillow
有了Pillow,处理图片易如反掌。随便找个图片生成缩略图:

>>> from 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-connector-python,用于科学计算的NumPy库:numpy,用于生成文本的模板工具Jinja2,等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值