#6 模块

模块化是现在比较流行的编程风格,一方面可以实现代码的重用,一方面可以防止命名冲突,python也不例外的使用模块化。

模块化

python的模块化就是在文件夹中添加一个 __init__.py 的模块,该模块可以为空,也可以写入自己的代码,如果不添加该文件否,则文件夹则被认为是普通的文件目录

比如:

  • mycompany
    • __init__.py
    • abc.py
    • xyz.py

python中用包(package)的概念了给模块添加命名空间,所以 'abc.py' 现在就叫做 mycompany.abc

除了单层命名空间,还可以添加多层的命名空间,但是值得注意的是,每层命名空间中都需要添加 __init__.py 的模块,例如:

  • mycompany
    • web
      • __init__.py
      • utils.py
      • www.py
    • __init__.py
    • abc.py
    • xyz.py
    • utils.py

应用utils模块时,可以根据命名空间的不同来应用不同的模块,比如 mycompany.web.utilsmycompany.utils 表示的模块不一样

模块化规范

一个模块的一般写法:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'module description'

__author__ = 'james sawyer'

import sys

def test():
  args = sys.argv
  if len(args) == 1:
    print('hello world')
  elif len(args) == 2:
    print('hello, %s' % args[1])
  else:
    print('blabla')

if __name__ == '__main__':
  test()

第1行注释可以使这个文件直接在Unix/Linux/Mac上运行;第2行注释表示.py文件本身使用标准UTF-8编码;第3行表示模块的一些说明信息;第4行使用 '__' 命名规则,表示这个变量是特殊变量

私有变量和公有变量

有时候有些内部实现代码不需要被别人知道,希望它是私有的, python通过命名规范来规定私有变量,使用 ___ 的方式,虽然这样并不能将变量私有化,但是这是一种规范:

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)

这一点和其它语言的处理方式相似,下一章会详细的将命名规范

使用第3方包管理 -- pip

python也拥有自己的包管理,和npm类似,python使用 pip 来安装管理python包

python包官网

命令行也类似,比如安装一个处理图片的包 Pillow

pip install Pillow

总结

本章主要将python的模块化,安装第3方python包,这一点和javascript基本类似

  • python模块化,在目录下添加__init__.py 模块
  • 命名空间的概念
  • python模块的写法规范
  • 使用 pip 安装管理python包

你可能感兴趣的:(#6 模块)