首页 > 编程语言 >0.组织Python代码的技巧

0.组织Python代码的技巧

时间:2023-06-24 17:57:01浏览次数:51  
标签:__ ... 技巧 Python 代码 py 模块 命名 def

组织Python代码技巧

英文版链接

一.构建Python项目

首先关注目录结构、文件命名和模块组织。

建议把所有的模块都放在src目录下,所有测试都和它并排。 python项目的组织结构 --- 建议把所有的模块都放在src目录下,所有测试都和它并排。

如下图:

<project>
├── src
│   ├── <module>/*
│   │    ├── __init__.py
│   │    └── many_files.py
│   │
│   └── tests/*
│        └── many_tests.py
│
├── .gitignore
├── pyproject.toml
└── README.md

<module> 是您的主要模块。

对此有疑问,可以想象一下使用pip安装模块的时候包名如 pip install pymsql
其中mysql就是包名,再想象一下我们导入模块 import pymysql 其中pymysql也是包名。

通常情况下,它与顶级项目的名称相同,但是你也可以不遵守。

1.设置src目录的原因

有很多项目有不同的做法,有些项目没有src目录,所有项目模块都分散开,显得项目很杂乱不易于管理。
如下案例:


non_recommended_project
├── <module_a>/*
│     ├── __init__.py
│     └── many_files.py
│
├── .gitignore
│
├── tests/*
│    └── many_tests.py
│
├── pyproject.toml
│
├── <module_b>/*
│     ├── __init__.py
│     └── many_files.py
│
└── README.md

由IDE会对模块名称进行排序,就会导致我们查看时很麻烦。
将模块设置在src内部的主要原因是将所有项目代码集中到一个目录中,CI/CD设置、项目元数据可以放在项目模块之外。

这样做唯一的缺点是你不能直接在Python代码中直接import module_a,我们需要将项目设置为安装在这个资源库下。
我们将在下面解决这个问题。

2.如何命名文件

2.1.无'文件'

首先,在Python中没有"文件"这一概念,这就是让初学者感到困惑的主要原因。

如果任意目录包含`__init__.py`,那他就是一个由模块组成的目录而不是文件。

如果任意目录包含__init__.py,那他就是一个由模块组成的目录而不是文件。

将每个模块视为一个命名空间

我指的是命名空间,因为你不能确定他们是否有很多函数、类,或者只是常量。它可以包含所有这些,也可以只是一些。

2.2.根据需要将事务放在一起

应该在一个模块中存放多个类(必须这些类与模块相关)。

只有当一个模块太大了或者需要处理不同问题的时候,我们才需要考虑是不是要将其分割。

受其他开发语言(eg:java,c#)的开发经验影响,有很多人认为这是一种不好的做法,但是在Python我推荐这样做

2.3.模块命名尽量命名为复数

根据经验,尽量结合业务背景用复数来给模块进行命名。

不过这条规则也有例外!模块可以命名为 core、main.py 等,以表示一个单一的事物。
根据自身项目进行判断,如果不知道如何命名可以直接用复数命名。

如何给python中的模块命令 --- 模块命名尽量命名为复数 不过这条规则也有例外!模块可以命名为 core、main.py 等,以表示一个单一的事物。

3.命名模块的真实案例

Google Maps Crawler 项目作为示例。

该项目负责使用Selenium从Google地图中抓取数据并输出

请在此处阅读更多信息

以下是该项目的目录(符合以上三条规则):

gmaps_crawler
├── src
│   └── gmaps_crawler
│        ├── __init__.py
│        ├── config.py 

标签:__,...,技巧,Python,代码,py,模块,命名,def
From: https://www.cnblogs.com/zhuoss/p/17501407.html

相关文章

  • Python json和pickle模块
    json和pickle模块用于序列化的两个模块序列化模块:json和picklejson,用于字符串和python数据类型间进行转换pickle,用于python特有的类型和python的数据类型间进行转换Json模块提供了四个功能:dumps、dump、loads、loadpickle模块提供了四个功能:dumps、dump、loads、......
  • Python潮流周刊#8:Python 3.13 计划将解释器提速 50%!
    你好,我是猫哥。这里每周分享优质的Python及通用技术内容,部分为英文,已在小标题注明。(标题取自其中一则分享,不代表全部内容都是该主题,特此声明。)首发于我的博客:https://pythoncat.top/posts/2023-06-24-weekly......
  • Python subprocess模块
    Pythonsubprocess模块subprocess模块可以执行shell命令的相关模块和函数有:os.systemos.spawn*os.popen*--废弃popen2.*--废弃commands.*--废弃,3.x中被移除以上执行shell命令的相关的模块和函数的功能均在subprocess模块中实现,并提供......
  • Python shutil模块
    Pythonshutil模块高级的文件、文件夹、压缩包处理模块将文件内容拷贝到另一个文件中,可以部分内容shutil.copyfileobj(fsrc,fdst[,length])例子importshutilf1=open("a.txt",encoding="utf-8")f2=open("b.txt","w",encoding="utf-8")shu......
  • 【python基础】文件-初识文件
    文本文件可存储的数据量是非常多的。每当需要分析或修改存储在文件中的信息时,首先就是读取文件到内存中,为此可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取。1.读取文件1.1读取整个文件要读取文件,需要一个包含几行文本的文件。下面首先来创建一个poems文本文件,,里......
  • Python os模块
    Pythonos模块os模块用于提供系统级别的操作os.getcwd()#获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname")#改变当前脚本工作目录;相当于shell下cdos.curdir#返回当前目录:('.')os.pardir#获取当前目录......
  • Python sys模块
    Pythonsys模块sys模块用于提供对解释器相关的操作sys.argv#命令行参数List,第一个元素是程序本身路径sys.exit(n)#退出程序,正常退出时exit(0)sys.version#获取Python解释程序的版本信息sys.maxint......
  • Python hashlib模块
    Pythonhashlib模块hashlib模块用于加密相关的操作,代替了md5模块和sha模块主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法#md5废弃importmd5hash=md5.new()hash.update('admin')printhash.hexdigest()#sha废弃importshahash=sha.new()ha......
  • 初学编程100个代码
    Java、Python等主流编程语言如今火的不行,初学编程都有哪100个代码呢?笔者结合实际开发经验和同学们最迫切关注的技术热点,总结了100个常用的代码实现,具体如下:1.输出"Hello,World!":print("Hello,World!")2.求两个数的和:点击查看代码a=5b=7c=a+bpri......
  • 在 Python 中,类型属于对象,变量是没有类型的
    在Python中,类型属于对象,变量是没有类型的:━━━━━━━━━━━━━━━━━━━━━━━━━a=[1,2,3]a="w3cschool"以上代码中,[1,2,3]是list类型,"w3cschool"是string类型,而变量a是没有类型,她仅仅是一个对象的引用(一个指针),可以是list类型对象,也可以指向是stri......