•模块是Python组织代码的基本方式。
•一个Python脚本可以单独运行,也可以导入到另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module)。
•所有的.py文件都可以作为一个模块导入
•模块名与脚本的文件名相同
•例如我们编写了一个名为hello.py的脚本,则可以在另一个脚本中用import hello语句来导入它。
如果需要添加模块目录:即使python可以直接读取而不需要指定路径,使用sys.path(该指令是查询python命令调取目录的)可以查询到的路径。方法有两种:
一:直接在ipython中使用命令:In [4]: sys.path.append('/root'),来添加,然后再次查看就有/root目录,默认添加在最后。
二:修改环境变量:目录 /root/.bashrc
export PYTHONPATH=/root
手动让它执行生效:source /root/.bashrc或 . /root/.bashrc
使用:echo $PYTHONPATH查看。如果使用ipython查看,则需要在ipython所在终端刷新使其生效。
vim module_text.py
#!/usr/bin/python
def wordCount(s):
chars = len(s)
words = len(s.split())
lines = s.count('\n')\\这里如果使用s.split则会因为换行符出现空字符串
print lines, words, chars
s = open('/etc/passwd').read()
wordCount(s)
输出:
[root@master xiaojing]# python module_text.py
34 53 1629
[root@master xiaojing]# wc /etc/passwd
34 53 1629 /etc/passwd
将python文件作为模块导入使用:
[root@master xiaojing]# python 2.py
34 53 1629
[root@master xiaojing]# ls
2.py module_text.py module_text.pyc
[root@master xiaojing]# cat 2.py
#!/usr/bin/python
import module_text
这里module_text.pyc该文件为编译过的文件。
如果再2.py文件的里面不仅是调用模块module_text,还有其他的程序需要执行则:即文件内容为:
[root@master xiaojing]# cat 2.py
#!/usr/bin/python
import module_text
s = '''hello world
python'''
module_text.wordCount(s)
执行结果却是:
[root@master xiaojing]# python 2.py
34 53 1629
1 3 18
这里的结果并不是我想要的,因为除了执行2.py文件,居然把模块文件的内容也执行出来了。那么我们就需要进行修改:通过" __name__ "这个内置函数来实现:
[root@master xiaojing]# cat module_text.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)
通过这样的操作可知道:可以在不影响元文件的执行情况下,调用该文件内的模块。
模块概念之后,可以 包 的概念:首先要有一个目录,里面有一个名字为 __init__ 的空文件,且目录名即包名。
使用包:模块的例子。module_text所在目录下创建空文件 __init__。这两个文件所在目录就是一个包。语法:
from xiaojing import module_text \\这里也可以写成:import xiaojing.module_text。这里就是导入方式不同。还可以使用as进行取别名:from xiaojing.module_text import wordCount as wc 使用则是wc('aaa')就可以执行
module_text。wordCount('abc')
0 1 3
这就是使用步骤。