zoukankan      html  css  js  c++  java
  • python 基础篇 模块化

    在做项目的时候,虽然你不可能把全世界的代码都放到一个文件夹下,但是类似模块化的思想还是要有的——那就是以项目的根目录作为最基本的目录,所有的模块调用,都要通过根目录一层层向下索引的方式来 import。

    目录结构

    ├── env.sh
    ├── proto
    │   └── mat.py
    ├── src
    │   └── main.py
    └── utils
        └── mat_mul.py
    
    # proto/mat.py
    
    class Matrix(object):
        def __init__(self, data):
            self.data = data
            self.n = len(data)
            self.m = len(data[0])
    
    # utils/mat_mul.py
    
    from proto.mat import Matrix
    
    def mat_mul(matrix_1: Matrix, matrix_2: Matrix):
        assert matrix_1.m == matrix_2.n
        n, m, s = matrix_1.n, matrix_1.m, matrix_2.m
        result = [[0 for _ in range(n)] for _ in range(s)]
        for i in range(n):
            for j in range(s):
                for k in range(m):
                    result[i][k] += matrix_1.data[i][j] * matrix_2.data[j][k]
    
        return Matrix(result)
    
    # src/main.py
    
    from proto.mat import Matrix
    from utils.mat_mul import mat_mul
    
    
    a = Matrix([[1, 2], [3, 4]])
    b = Matrix([[5, 6], [7, 8]])
    
    print(mat_mul(a, b).data)
    
    ########## 输出 ##########
    
    [[19, 22], [43, 50]]
    

    方法1 将 当前模块的根目录 加入到环境变量 PYTHONPATH,在终端中 执行 source env.sh 使其在终端中临时生效。

    # env.sh
    
    #!/bin/bash
    
    export PYTHONPATH=$PYTHONPATH:$(PWD)
    

    方法2 修改 sys.path

    import sys
    sys.path[0] = '/home/ubuntu/workspace/your_projects'
    
  • 相关阅读:
    activity 背景透明
    win系统注册缺少的库 32位系统 64位系统
    android 窗
    wireshark抓包分析
    juqery select 标签
    IOS开发应用之Quartz 2D学习指南
    为什么你总会觉得自己的产品不够好
    日志宝
    Android之Inflate()方法用途+setContentView和inflate区别
    Ralasafe
  • 原文地址:https://www.cnblogs.com/hiyang/p/12634714.html
Copyright © 2011-2022 走看看