模块
模块是python组织代码的基本方式。
一个python脚本可以单独运行,也可以导入到另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module),所有的.py文件都可以作为一个模块导入。
模块名与脚本的文件名相同,例如我们写了一个hello.py的文件,我们在另外一个脚本中可以用Import hello 语句来导入它
python的模块可以按目录组织为包
包的目录下,必须有一个_init_.py文件。
自建sys.path目录,方便以后引入模块:
vim .bashrc
加入:
export PYTHONPATH=/root/library
source .bashrc
[root@jie ~]# echo $PYTHONPATH
/root/library
此时,我们就可以看到python中 sys.path已经将/root/library 路径引用进去,以后我们可以将模块放入此位置,python会自行去该目录下面搜索
模块使用
创建一个读取文件信息的脚本,用例外一个脚本调用:
vim w.py
#!/usr/bin/python
def wordCount(s):
chars = len(s)
words = len(s.split())
lines = s.count('\n')
print ("chars:%s,words:%s,lines:%s "%(chars,words,lines))
s=open('/etc/passwd').read()
wordCount(s)
创建另外一个脚本去调用他
vim s.y
#!/usr/bin/env python
import w
s = """hello world
python"""
w.wordCount(s)
[root@jie py]# python s.py
chars:1212,words:47,lines:26
chars:19,words:3,lines:1
此时 运行s.py脚本 会输出 w.py的值,也会输出s.py脚本中定义的值
我们需要优化一下,当将一个脚本当成模块调用时,应该去掉该脚本的输出值
调用w.py函数方法:
cat wc.py
#!/usr/bin/python
def wordCount(s):
chars = len(s)
words = len(s.split())
lines = s.count('\n')
print lines,words,chars
if __name__ == '__main__':
s=open('/etc/passwd').read()
wordCount(s)
优化一下调用脚本
cat t.py
#!/usr/bin/python
import wc
t="""hello word py"""
wc.wordCount(t)
此时s.py将调用w.py的方法,并且不会输出w.py的值
[root@jie py]# python w.py
chars:1212,words:47,lines:26
[root@jie py]# python s.py
chars:19,words:3,lines:1
包:
包的名字其实就是目录名字
引用模块:import xxx
引用包下面的模块:from xxx import xxx
目录下面需要有一个__init__.py 文件,文件内容可以为空
[root@jie py]# ls bao/
__init__.py w.py
[root@jie py]# cat s.py
#!/usr/bin/env python
from bao import w
s = """hello world
python"""
w.wordCount(s)
[root@jie py]# python s.py
chars:19,words:3,lines:1
此时就是 根据目录引用模块了