Python day6 模块

2024-07-31 14:24:03 浏览数 (2)

模块(Module)

Python中,一个.py文件就称之为一个模块,大大提高了代码的可维护性。当一个模块编写完毕,就可以被其他地方引用。

安装第三方模块

是通过包管理工具pip完成的(如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了,Mac或Linux上有可能并存Python 3.x和Python 2.x,因此对应的pip命令是pip3)

pip install Pillow

Anaconda一个基于Python的数据处理和科学计算平台,内置了许多非常有用的第三方库,装上Anaconda,相当于把数十个第三方模块自动安装好了,非常简单易用

模块搜索路径

试图import一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错:搜索路径存放在sys模块的path变量中

如果要添加新的目录,两种方法:

  • 直接修改sys.path,如sys.path.append('/Users/michael/my_py_scripts')
  • 第二种方法是设置环境变量PYTHONPATH

使用包(Package)来组织模块

相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突,但是也要注意,尽量不要与内置函数名字冲突

使用包则如下目录存放:init.py的文件必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包

mycompany ├─ init.py

├─ abc.py

└─ xyz.py

创建自己的模块时,要注意:

  • 模块名要遵循Python变量命名规范,不要使用中文、特殊字符;
  • 模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块

使用模块

代码语言:python代码运行次数:0复制
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module ' #一个字符串,表示模块的文档注释

__author__ = 'Michael Liao' #__author__变量把作者写进去

import sys

def test():
    args = sys.argv #sys模块有一个argv变量,用list存储了命令行的所有参数
    if len(args)==1:
        print('Hello, world!')
    elif len(args)==2:
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')

if __name__=='__main__':
    test()

当我们在命令行运行hello模块文件时,Python解释器把一个特殊变量name置为main,而如果在其他地方导入该hello模块时,if判断将失败,因此,这种if测试可以让一个模块通过命令行运行时执行一些额外的代码,最常见的就是运行测试

作用域

一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用

公开函数/变量

正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等

类似xxx这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的authorname就是特殊变量,hello模块定义的文档注释也可以用特殊变量doc访问,我们自己的变量一般不要用这种变量名;

非公开函数/变量:_xxx和__xxx

类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用;原则上是不被引用的但是不代表不能引用,强制掉用私有函数也是可以用的

0 人点赞