Python3:Module (模块)And Package(包)

模块

模块的基本定义

"""
在python中。模块是代码组织的一种形式。把功能相近的函数放到一个文件中,一个文件(.py)就是一个模块(module),模块名就是文件名
去掉后缀py。这样做的好处:
    - 提高代码的复用率、可维护性、。一个模块编写完毕后,可以很方便的在其他项目中导入
    - 解决了命名冲突,不同模块中相同的命名不会冲突

常用标准库:
    标准库           说明
---------------------------------
    builtins        内置函数默认加载
    math            数学库
    random          生成随机数
    time            时间
    datetime        日期和时间
    calendar        日历
    hashlib         加密算法
    copy            拷贝
    functools       常用的工具
    os              操作系统工具
    re              字符串正则匹配
    sys             Python自身的运行环境
    multiprocessing 多进程
    threading       多线程
    json            编码和解码 JSON对象
    logging         记录日志,调试

模块:
    1、自定义模块
    2、使用系统模块
导入模块的方法:
    1、import 模块名
        模块名.变量   模块名.函数  模块名.类
    2、from 模块名 import 变量 | 函数  | 类
    3、from  模块名 import * (*:该模块中所有的)
"""

import caculate

lst = [1, 2, 3, 4, 5, 6]

result = caculate.add(*lst)  # 拆包
print(result)

result = caculate.minus(*lst)
print(result)

# 使用模块变量

print(caculate.num)

s = caculate.Caculats(12)
s.test()

From 引入

#  from  引入
"""
导入模块的方法:
    1、import 模块名
        模块名.变量   模块名.函数  模块名.类
    2、from 模块名 import 变量 | 函数  | 类
    3、from  模块名 import *  (*:该模块中所有的)
        如果想限制获取的内容:可以在模块中添加 类似:__all__ = ['all','multiply']可以限制
    4、无论是from 或者import 都会将模块中的内容都加载进去
        如果不希望其进行调用,就是用 if __name__ == '__main__':主函数 可以屏蔽

        __name__  :是调用的模块的名称
"""

# from caculate import add, multiply,Caculats
from caculate import *

lst = [1, 2, 3, 4, 5, 6]

result = add(*lst) + multiply(*lst)  # 拆包
print(result)

s = Caculats(80)
s.test()

示例

__all__ = ['add', 'multiply', 'Caculats']  # 可以限制白名单,除此之外其他都不让访问
# 计算模块
num = 1000
name = 'caculation'


def add(*args):
    if len(args) > 1:
        sm = 0
        for i in args:
            sm += i
        return sm
    else:
        print("至少传入两个参数")
        return 0


def minus(*args):
    if len(args) > 1:
        m = 0
        for i in args:
            m -= i
        return m
    else:
        print("至少传入两个参数")


def multiply(*args):
    if len(args) > 1:
        sm = 1
        for i in args:
            sm *= i
        return sm
    else:
        print("至少传入两个参数")
        return 0
    pass


def divide(*args):
    if len(args) > 1:
        sm = 1
        for i in args:
            sm += i
        return sm
    else:
        print("至少传入两个参数")
        return 0
    pass


# 类
class Caculats:
    def __init__(self, nm):
        self.__num = nm

    def test(self):
        print("正在计算。。。。。。")

    @classmethod
    def test1(cls):
        print("正在计算---------caculation进行运算")


def test():
    print("我是测试使用的!")


if __name__ == '__main__':
    test()

文件夹和包

"""
文件夹、 包:
    文件夹:非py文件
    包:存放py文件。一个包中可以存放多个模块
    项目 》包》模块 》类 函数  变量
    from 包 import 模块
    from  包.模块 import 类|函数|变量
    from 包.模块 import *
    from .模块 import 类  :从当前目录下导入

    注意:所有的from  都是基于项目目录

__all__ = [] :定义模块中需要对外暴露的类或者变量
    注意:只是在* 的时候起作用

# 只有本模块运行是才会是main
if __name__ == '__main__':
    print("test")


"""

初始化文件:_ init _.py 的作用

#  初始化加载
"""
__init__:
    作用:
        1、当导入包的时候,把一些初始化的函数、变量、类定义在__init__.py 文件中
        2、此文件中变量、函数的访问,只需要包名.函数名...
        3、通过 __all__ = ["package_init"]  向外暴露相关模块,如果不定义__all__ 就无法访问包中的模块
"""
print("--------->init<-------------")

__all__ = ["package_init","create_app","print_a"]  # 向外暴露那个模块


def create_app():
    print("创建-app")


def print_a():
    print("a" * 10)

"""
__init__.py  默认只要导包就执行
    当你导入包的时候,默认调用—__init__.py 文件
"""
from package import *

create_app()
print_a()

循环依赖

cycle_introduce

# 循环引入:一般是架构失败,循环依赖;这是错误的;会报错
"""
循环引入:
    A  引用 B
        def test():
            f()
    B  引用 A
        def test():
            test()
产生原因:
    1、大型的项目中需要很多的python文件,由于架构设计不当,导致模块中项目导入
解决办法:
    1、重新架构:成本比较高
    2、将导入的语句放到函数中
    3、把导入语句放到模块最后
"""
from cycle_introduce2 import func


def task1():
    print("------task1------")


def task2():
    print("task2")
    func()


if __name__ == '__main__':
    task1()
    task2()

cycle_introduce2

# 循环引入
# from cycle_introduce import task1

def func():
    print("循环调用2中func---------1")
    from cycle_introduce import task1
    task1()
    print("循环调用2中func---------2")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值