Python学习——模块Module

本文深入探讨了Python中模块和包的概念,解释了模块如何提高代码的可维护性,避免函数名和变量名冲突,以及如何正确地导入和使用模块。同时,介绍了不同导入语句的特点,命名空间和作用域的概念,以及如何使用模块相关函数进行调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔记内容整理自廖雪峰官网和菜鸟教程

模块的意义

模块Module是一个以.py结尾的Python文件,能定义函数、类、变量,也可以包含可执行的代码。
模块提高代码的可维护性,可以引用其他模块包括Python内置模块和第三方模块
相同名字的函数和变量可以被存放在不同的模块中,可以避免函数名和变量名冲突
引入包后,顶层包的名称不冲突的情况下,所有模块名都不会冲突。每一各包目录下都有__init__.py文件,来区分包目录和普通目录。
注意:编写模块不能与内置模块名字冲突,可以通过import名字来看系统内是否已存在该模块,尽量不要与内置函数名字冲突。

调用模块
import三种语句
  • import
    将导入的模块作为对象,调用模块下的函数
    推荐使用import语句,可以增加可读性,避免名称冲突
#伪代码

#!/usr/bin/python 
# -*- coding: UTF-8 -*- 

# 导入模块 
import modulename
#调用模块内函数
modulename.function()
  • from…import…
    从模块中导入一个指定的部分到当前的命名空间中,可直接调用函数
#伪代码

#!/usr/bin/python 
# -*- coding: UTF-8 -*- 

# 导入模块 
from modulename import funcname
#调用模块内函数
funcname()
  • from…import * 导入一个模块内所有项目,但尽量不要使用这种方法(?)
#伪代码

#!/usr/bin/python 
# -*- coding: UTF-8 -*- 

# 导入模块 
from modulename import *
#调用模块内函数,不需要加模块名
funcname()
命名空间和作用域
#全局命名空间中定义num
num=10
def addnum():
#如果不用global声明全局变量则仅在局部变量中搜寻num,报错
    global num
    num=num+1
    print('inside addnum',num)

print('beforenum',num)
addnum()
print('afternum',num)
print('beforenum',num)
addnum()
print('afternum',num)
#output
#beforenum 10
#inside addnum 11
#afternum 11
#beforenum 11
#inside addnum 12
#afternum 12
模块相关函数
  • dir
    dir(module_name)以list返回返回模块中定义的所有模块、变量、函数
  • locals() globals()
    如果在函数内部调用 locals(),以dict返回所有能在该函数里访问的命名。
    如果在函数内部调用 globals(),以dict返回的是所有在该函数里能访问的全局名字。
  • reload(module_name)
    import多次模块,只会被执行一次,用reload(module_name)重载模块
import math
#dir返回模块变量和函数
content=dir(math)
print(content)
#output
#['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

#以dict返回所有函数里能访问的全局名
content=globals()
print(content)
content['__name__']#dict截取key对应的value

可以将包看成一个文件夹,但其中必须包含__init__.py文件(可以为空)以区别普通的目录。
顶层包名不冲突则模块不会冲突。

#!/usr/bin/python 
# -*- coding: UTF-8 -*- 
if __name__ == '__main__': 
    print '作为主程序运行' 
else:
    print 'package_name 初始化'
编写模块

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

' a test module '#module的注释文档

__author__ = 'Michael Liao'#作者

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('Too many arguments!')

if __name__=='__main__':
    test()
安装第三方模块
安装模块
  • 命令提示符/python
    命令提示符窗口下运行pip,如果未找到可重新运行安装程序添加pip
    命令:pip install modulename
    第三方库官网注册:pypi.python.org
  • Anaconda
    参见博客https://www.cnblogs.com/Leo_wl/p/9116506.html
    conda install package_name
    e.g. conda install numpy
    多个包可以输入多个名字
    e.g. conda install numpy pandas
搜索路径

当你导入一个模块,Python 解析器对模块位置的搜索顺序是:1、当前目录
2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录PYTHONPATH和由安装过程决定的默认目录。
Windows系统中典型的PYTHONPATH为:set PYTHONPATH=/usr/local/lib/python

修改/添加模块路径

修改sys.path添加搜索目录,但每次退出再打开需要重新添加路径

import sys
print sys.path #查看当前模块的引用路径
sys.path.append('path') #添加模块搜索路径

也可以设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中,而Python本身的搜索路径不受影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值