python模块与包

1、模块(module)

逻辑上来说模块就是一组功能的组合;实质上一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

import加载的模块分为四个通用类别:

a.使用python编写的代码(.py文件);

b.已被编译为共享库或DLL的C或C++扩展;

c.包好一组模块的包

d.使用C编写并链接到python解释器的内置模块;

2、模块的使用

模块的使用通过关键字import和from进行导入。模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行。

#我们先自定义一个模块 名为mod.py;
print("hello world")

def func1():
    print("python")

def func2():
    print("hello")

#然后我们使用里一个py文件进行导入这个模块;
import mod
import mod
import mod
>>>
#只打印了一次
hello world

第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的语句.

3、模块的导入方式

以上述mod.py文件为例

  • 直接导入,再使用该模块的函数时
    import mod
    mod.func1()
    运行结果
    hello world
    python

  • 导入模块特定部分
    from mod import func1
    func1()
    运行结果
    hello world
    python

  • 导入模块起别名
    import mod as m
    m.func1()
    运行结果
    hello world
    python

  • 模块成员全部导入(不推荐使用)
    from mod import *
    func1()
    func2()
    运行结果
    hello world
    python
    hello

  • 一次导入多个模块
    import mod
    import mod1
    import mod2
    或者直接用“,”分隔
    import mod,mod1,mod2

2、包(package)

包是有层次的文件目录结构,内部有多个模块或多个子包,一般有__init__.py初始化的这个文件(3.3+ 的版本不需要)。

假设有下面的层次文件目录结构:

parent_directory/
    main.py
    ecommerce/
        __init__.py
        database.py
        products.py
        payments/
            __init__.py
            paypal.py
            authorizenet.py

其中ecommerce为包,payments为子包,模块databases中有Database类,products中有Product类。

  • 绝对导入Product类并实例化

以在主函数main.py导入包和模块为例

#main.py
import ecommerce.products
product = ecommerce.products.Product()
#或者from...import导入
from ecommerce.products import Product
product = Product()
#或
from ecommerce import products
product = products.Product()
  • 相对导入
    在包(package)的情况下,如果知道父模块的名称,那么就可以使用相对导入。比如当前在products模块下工作,想从隔壁的database模块导入Database类,就可以使用相对导入:
#econommerce下的products.py
# 点号表示使用当前路径的database模块
from .database import Database   

如果我们正在编辑ecommerce.payments包里的paypal模块,需要引用父包里的database模块:

#paypal.py
# 使用两个点号表示访问上层的父类
from ..database import Database  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值