简单模块化

  • import 最好在最顶端
  • sys.path.append("..")表示把当前程序所在位置向上提了一级 [python 3.6 以上要加上

    sys.path.extend([os.path.join(root, name) for root, dirs, _ in os.walk("../") for name in dirs])
  • 在python3规范中,__init__.py并不是必须的。

  文件结构:

  1. .
  2. ├── utils
  3. ├── util.py
  4. └── class_util.py
  5. ├── src
  6. └── sub_main.py
  7. └── main.py
  1. # utils/utils.py
  2.  
  3. def get_sum(a, b):
  4. return a + b
  1. # utils/class_utils.py
  2.  
  3. class Encoder(object):
  4. def encode(self, s):
  5. return s[::-1]
  6.  
  7. class Decoder(object):
  8. def decode(self, s):
  9. return ''.join(reverse(list(s)))
  1. # main.py
  2.  
  3. from utils.utils import get_sum
  4.  
  5. print(get_sum(1, 2))
  6.  
  7. ########## 输出 ##########
  8.  
  9. 3
  1. # src/sub_main.py
  2.  
  3. import sys
  4. sys.path.append("..")
  5.  
  6. from utils.class_utils import *
  7.  
  8. encoder = Encoder()
  9. decoder = Decoder()
  10.  
  11. print(encoder.encode('abcde'))
  12. print(encoder.encode('edcba'))
  13.  
  14. ########## 输出 ##########
  15.  
  16. edcba
  17. abcde

项目模块化

  以下Python代码用命令行运行main.py会出错,找不到proto.

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

  有两个方法解决:

  1.在文件中强行修改sys.path[0]:

  1. import sys
  2.  
  3. sys.path[0] = '/home/ubuntu/workspace/your_projects'

  2.在Python的虚拟环境中的activate文件,增加:(windows系统中无效)

  1. export PYTHONPATH="/home/ubuntu/workspace/your_projects"

参考

  极客时间《Python核心技术与实战》专栏

Python基础:模块化来搭项目的更多相关文章

  1. python基础1 - 多文件项目和代码规范

    1. 多文件项目演练 开发 项目 就是开发一个 专门解决一个复杂业务功能的软件 通常每 一个项目 就具有一个 独立专属的目录,用于保存 所有和项目相关的文件 –  一个项目通常会包含 很多源文件 在 ...

  2. 10个Python基础练习项目,你可能不会想到练手教程还这么有趣

    美国20世纪最重要的实用主义哲学家约翰·杜威提出一个学习方法,叫做:Learning By Doing,在实践中精进.胡适.陶行知.张伯苓.蒋梦麟等都曾是他的学生,杜威的哲学也影响了蔡元培.晏阳初等人 ...

  3. python基础教程项目五之虚拟茶话会

    python基础教程项目五之虚拟茶话会 几乎在学习.使用任何一种编程语言的时候,关于socket的练习从来都不会少,尤其是会写一些局域网的通信的东西.所以书上的这个项目刚好可以练习一下socket编程 ...

  4. Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程

    [保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...

  5. 快速掌握Python的捷径-Python基础前传(1)

    文: jacky(朱元禄) 开文序 最近看新闻,发现高考都考Python了,随着人工智能的火热,学数据科学的人越来越多了!但对于数据行业本身来说,现象级的火热,这并不是什么好事. 方丈高楼平地起,无论 ...

  6. python基础全部知识点整理,超级全(20万字+)

    目录 Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https:// ...

  7. Python之路3【第一篇】Python基础

    本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...

  8. 进击的Python【第二章】:Python基础(二)

    Python基础(二) 本章内容 数据类型 数据运算 列表与元组的基本操作 字典的基本操作 字符编码与转码 模块初探 练习:购物车程序 一.数据类型 Python有五个标准的数据类型: Numbers ...

  9. Python基础s14-day1

    2016年7月23日"Python基础s14-Day1" Python是什么? Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),是一种面向对象.直译式 ...

随机推荐

  1. Node.js学习笔记(1):Node.js快速开始

    Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...

  2. Linux环境下使用dosemu写汇编

    本章学习内容是汇编语言,现在直接写汇编的机会不多了,但一定要能读懂,信息安全的核心思维方式“逆向”在这有很好很直接的体现,反汇编就是直接的逆向工程. 所以我在前几天的学习中在Ubuntu环境下安装了可 ...

  3. EASYARM-IMX283 制作ubifs文件系统

    ubifs主页:http://www.linux-mtd.infradead.org/doc/ubifs.html nandflash上常用的文件系统有jffs2.yaffs和ubifs,其中ubif ...

  4. 算法(Algorithms)第4版 练习 1.3.12

    方法实现: package com.qiusongde; import java.util.Iterator; import java.util.NoSuchElementException; imp ...

  5. 遁入NOIP记

    回归noip啦 给自己定个小目标 500分起步 在这里列一下需要搞的东西OvO 1.算法基础 模拟 贪心 二分 分治 2.搜索 / 记忆化搜索 剪枝 对抗搜索 3.dp 状压 组合数学 树D 单队 D ...

  6. 1087 All Roads Lead to Rome (30)(30 分)

    Indeed there are many different tourist routes from our city to Rome. You are supposed to find your ...

  7. ACM学习历程—HDU5265 pog loves szh II(策略 && 贪心 && 排序)

    Description Pog and Szh are playing games.There is a sequence with $n$ numbers, Pog will choose a nu ...

  8. scala新人佑门

    scala语言 1. val和var val和var当前区别在于前者只能被赋值一次,就像java中的final,但是后者则可以随意覆盖: 2. Unit Unit返回代表空返回,类似于vo 3. 类型 ...

  9. tyvj1061移动服务——DP

    题目:http://www.joyoi.cn/problem/tyvj-1061 DP记录状态为当前任务时不在此任务位置上的两个人的位置(因为一定有一个人在此任务位置上): 不妨设初始位置p[0]=3 ...

  10. TPS与QPS

    一.TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数.TPS包括一条消息入和一条消息出,加上一次用户数据库访问.(业务TPS = CAPS × ...