# Python菜鸟学习 **Repository Path**: bashenandi/python-rookie-study ## Basic Information - **Project Name**: Python菜鸟学习 - **Description**: Python菜鸟学习手册,聚焦于有其他编程语言基础的学习,或者针对Python的梳理学习大纲。没有过深的内容,都是基础知识的整理总结。 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 4 - **Created**: 2021-01-26 - **Last Updated**: 2025-02-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python菜鸟学习 本学习教程,并不是新手入门教程,更多偏向于学习大纲、指南一类的归纳总结类教程。如要了解Python的新手入门,请移步[菜鸟教程](https://www.runoob.com/python3/python3-tutorial.html)。 [TOC] ## 零.前言 你需要一个**Command Line Tool**。 众所周知的原因,命令行操作是真正的核心内容,所有的视窗操作界面,都是套在命令行之上的一层UI,尤其是对于开发来说,熟悉命令行操作可以对开发了解的更为透彻。 几乎所有的非Windows系统都会自带命令行工具。而Windows内嵌的**CMD**异常难用,因此强烈建议安装并使用 **[git bash](https://git-scm.com/)** 或者 **[Windows Terminal](https://docs.microsoft.com/zh-cn/windows/terminal/)** 作为Windows平台中的命令行工具。 ## 一.Python的多版本管理 **Python** 不同小版本间会有略微区别,**pip** 包管理,也和 **Python** 版本有直接的关系。因此针对可能由不同 版本所创建的项目,在开发和部署时,可以使用 **Python** 的多版本以及多环境支持,来进行单一机器的多版本隔离。 ### Python多版本管理 **Python** 的多版本管理,有些类似于虚拟机的管理。即可以在同一台电脑中安装多个版本的 **Python** ,并且相互独立,软件包也相互独立,针对不同项目使用不同版本来运行。具体请参见 [Python多版本管理](versions/multi-version.md) 。 ### Python虚拟环境管理 **Python** 的虚拟环境管理,可以看做是多版本管理的延伸。例如,有四个项目分别使用了两个不同的 **Python** 版本进行开发,假设为 **3.6.5** 以及 **3.9.2** ,同时,这四个项目又分别使用了不同的组件依赖,此时,就可以创建四个虚拟环境,例如:Env365_1,Env365_2、Env392_1和Env392_2,分别进行管理。 学习 [Python虚拟环境管理](versions/multi-virtualenv.md)。 ## 二.开发工具的选择 进行 *Python* 语言的开发,一般会用 *VSCode* 和 *PyCharm* 这两个可视化的IDE工具,接下来会依次阐述: ### VSCode VSCode是微软发布的开发工具,可以通过安装组件,支持几乎所有的开发语言。点击[了解详情](ide/vscode.md)查看在VSCode中开发Python的配置。 ### PyCharm PyCharm是由Jetbrains开发的一款优秀的Python开发工具,囊括了开发Python所需的几乎所有功能,基本无需额外安装组件。同时提供了可以免费使用的社区版本。点击[了解详情](ide/pycharm.md)查看PyCharm的使用。 **如果在使用IDE尝试开发时,遇到 Module 无法找到的错误,可先阅读 四.组件管理 章节进行了解。** ## 三.Python 小技巧 Python作为一门面向对象的开发语言,有一些有特色的语言特性,同时也提供许多好用的内置函数,可以较大的提供编码的水平及质量,本章讲述一些比较常用的技巧。 ### 自定义函数 Python 通过关键词 *def* 来定义一个函数,有一些特性有别于其他语言。[点此](basic/methods.md)了解更多。 ### 面向对象 虽然 Python 是弱类型的解释型语言,但是依旧支持面向对象编程,有一些特性在使用中,需要予以注意。[了解更多](basic/object.md) Python 中面向对象编程的知识。 ### 加载模块与动态加载 上文已经讲述了 Python 也是面向对象的编程语言,由于是解释型语言因此导致很多约束比较松散,但依旧会有包和命名空间的概念,只不过在 Python 中称之为模块(Module)。一般的模块导入可以直接在代码中使用 **import** 语句,对于一些特殊场景,也可以使用动态加载的方式。[了解更多](basic/module.md)模块以及加载的知识。 ### 字符串 字符串几乎是所有编程语言中,最常用、最通用的类型,Python 中的字符串类型,也提供了不少非常有用的字符串方法。[了解更多](basic/string.md)。 ### 序列化 Python内置了**JSON**组件用于序列化,但是由于是弱类型的缘故,因此在序列化时,经常会遇到类型无法序列化的问题,需要特别予以处理。[了解更多](basic/json.md)在 Python 中序列化对象的内容。 ### Enum枚举 **Enum**是编程语言中非常灵活好用的一种特殊的对象类型,通常可用于有限数目的值定义。用于约束方法或者取值的范围。[了解更多](basic/enum.md)如何在 Python 中使用 Enum。 ### 日期与时间 日期与时间是几乎所有编程语言中都比较繁琐的一种数据类型。其主要原因在于 **时区** ,亦即运行程序的电脑所在时区与UTC时区的时差。[了解更多](basic/date-and-time.md)Python中日期与时间的使用。 ### 文件与目录操作 Python对于文件与目录的操作,都提供了很简单的处理函数。[了解更多](basic/files.md)文件读写以及目录操作的相关内容。 ### 内置函数 Python还提供了几十个内置函数,多数与其他语言并无太大差异,但是有一些函数对于排序、筛选等操作有非常大的帮助。[点此](basic/built-in-methods.md)了解更多。 ## 四.Python 组件分析 Python作为一款开源开发语言,有着庞大的开源组件库,例如:[pypi](https://pypi.org/)上可以找到所有Python的开源组件。在此仅简略介绍日常最常用的组件。 ### 组件管理 **请节请务必优先阅读!** 在学习Python组件之前,请务必[了解更多](components/index.md)关于Python如何搜索组件路径,如何安装,以及项目依赖等方面的知识。 ### Flask/Flask-Cors **Flask**是一款轻量级,强大且已用的Web组件。内置WSGI轻量级服务器,内置路由解析,模板渲染等功能。**Flask-Cors** 是Flask的子组件,用于支持Flask实现跨域的支持。[了解更多](components/flask.md)关于Flask 的入门知识。 **内置WSGI启动Python仅限于开发时使用,项目部署生产环境时,强烈建议使用遵循wsgi标准的uWSGI服务软件,进行负载部署。** ### python-dotenv **python-dotenv**是一款简易的环境配置文件加载工具,用于隔离在不同环境中的独立配置。[了解更多](components/dotenv.md)关于加载配置的内容。 ### Requests **Requests**是一款强大的网络请求工具,封装了常用的请求方法,支持常规数据传输、文件传输等。注意有别于Flask自带的Request组件。[了解更多](components/requests.md)相关内容。 ### 加密与解密 在做前后端数据交互,以及敏感数据脱敏存储时,需要对数据进行加密/解密处理。[了解更多](components/encryption-decryption.md)关于Python加解密的内容。 ### 操作EXCEL Python 的卖点之一即是在数据分析方面的优势,在日常的工作中,对于 Excel 的操作是非常常见的操作。[了解更多](components/excel.md)在Python中操作 Excel 的知识。 ## 五.数据持久化 数据持久化,一般是指将代码中运行的临时数据,通过存储实现持久化的使用、管理。比较常见的方式是程序语言将数据存储为xml文件或者存储到数据库中。 ### 操作XML **XML**是数据文件持久化经常使用的一种方式,Python提供了数种XML的操作类,一般综合性能与功能比较常用的是ElementTree。通常建议不要使用拼接String的方式来生成xml,因为String在编程语言中的特殊定义,会导致在并发或者数据量稍微多一点时,发生内存泄漏的问题。[点此](data/xml.md)了解详情。 ### 操作数据库 Python为操作数据库提供了Python DB-API接口。正如其名所属,Python仅内建了一套**接口**的定义,实际上并不能直接操作数据库。实际上要依赖底层系统安装的数据库链接实现。该接口支持的数据库包括: * MySQL * Microsoft SQL Server * Oracle等 对于可以操作哪种数据库,起到实际作用的是安装在底层操作系统中的对应数据库驱动,而上层的操作语句是基本一致的。[点此](data/database.md)了解更多。 ### SQLAlchemy **SQLAlchemy** 是一款十分强大的ORM数据处理组件,以面向对象的形式来操作数据库,支持连接池、支持事务以及一些复杂查询功能。极大程度提高了编程语言操作数据库的能力。而为什么现代编程语言都强调使用ORM对象,而不是原生方式来操作数据库的原因,此处不再赘述,可百度了解。[点此](data/sqlalchemy.md)了解更多。 ## 六.Flask深入学习 ### Request & Response 所有的应用,不外乎输入(Request)与输出(Response),因此学习Flask,可以由此开始。[了解更多](flask/request-response.md) 请求和响应的介绍。 ### Route & Blueprint 路由是现代Web应用中格外重要的一个概念,一个遵循 **RESTful** 标准的路由结构,会大大提供代码的可读性,并且极易扩展。而 *Blueprint* 更像是路由的一个抽象子集。[点此](flask/route-blueprint.md)了解更多。 ### Session & Cookie 对于应用的安全管理,是一个绕不开的话题。现代Web应用,通常会采用前后端交互的方式,而在此交互模式下,比较常用的安全校验方式,一般是通过JWT和会话管理,JWT是一个单独的话题,与具体的语言实现无关,在此不再赘述。[了解更多](flask/session-cookie.md)关于会话的内容。 ### 静态文件 & 模板渲染 现代的Web应用,除了纯粹的 **Web Server** ,一般不需要静态文件的支持,其他应用,至少会需要一个 *favicon* ;而模板渲染,在现代前后端分离的前提下,用到的也不多,此处仅做简单说明。[点此](flask/resources-templete.md)了解更多。 ### 官方文档 想要了解更多,关于Flask的的信息,请移步[官方文档](https://dormousehole.readthedocs.io/en/latest/)。 ## 七.最佳实践 最佳实践(best practice),是一个管理学概念,认为存在某种技术、方法、过程、活动或机制可以使生产或管理实践的结果达到最优,并减少出错的可能性。 而对于软件工程来说,**最佳实践**一般是在基础理论之上整理汇总出来的一些经验论与方法论,一方面可能会降低系统的维护与管理难度;另一方面会极大增强系统的稳定性与可延展性。 ### 版本管理 前面讲过了多版本和多虚拟环境的管理,那么如何合理的使用两项技术,已更加高效的工作呢?[这里](best-practice/versions.md)仅是个人的意思思考。 ### 装饰器 装饰器,是增强函数或者类功能的一种特殊函数。合理的使用装饰器,可以极大的优化代码,增强可读性,内聚统一功能。[了解更多](best-practice/decorators.md)装饰器的知识。 ### 命名规范 由于Python是一种弱类型语言,官方也并不知道标准,因此除了内置的类库和函数之外,理论上可以任意命名,但这在编程中显然不是合理的操作,因此本节整理一些通用的规则进行说明。[了解更多](best-practice/named.md) ### 工程结构 软件工程中的结构,指工程中的文件存储结构,一般会从两个维度来组织:项目结构与代码结构。项目结构是指该软件工程中,应用文件、资源文件、数据文件等的组织结构;代码结构,一般会结合开发中的多层架构而组织,例如:模型层、数据层、业务层等。[了解更多](best-practice/project-structure.md)。 ### 单元测试 对于大型的,或者说流程较多的系统中,测试是一件比较繁琐的事情。这是由于在开发过程中,多数的逻辑异常可能会出现在各个环节中,而我们不可能做到每一项测试,都覆盖到流程中的每一个项目。 而单元测试,正是由此而生。顾名思义,即对系统最小单元的测试过程。[了解更多](best-practice/unit-test.md)单元测试的信息。 ### 日志 提供Web服务的 *Web Server* 一般都会提供信息(*info*) 级别的日志,通常只能用于用户行为分析;对于错误(*error*) 级别的信息,也只能记录下 *5XX* 标识的系统级错误。而绝大多数情况下,我们并不想给用户展示这些详细的错误信息,但是又需要在用户不可知的情况下记录下这些错误信息,以便进行错误重现,而此时就要用到Python提供的日志组件进行记录。[了解更多](best-practice/logging.md) ## 八.项目部署 正如前面章节所提到的,Python提供的内置 *WSGI* 服务器仅适用于开发,将其用于生产会有很大的安全问题和性能问题。本章讲述在不同操作系统中如何部署Python项目。 ### uWSGI 在类 *Linux* 系统中较多使用 *uWSGI* 部署Python项目,请[了解更多](deploy/linux.md)关于在类 *Linux* 系统中部署 Python项目的知识。 ### FastCGI 在 *Windows* 中,或者更准确的说在 *IIS* 中部署Python项目,有别于 *Linux* 系统的最大区别,只是无法使用 *uWSGI*,而要改用 *IIS* 所支持的 *FastCGI* 方式。请[了解更多](deploy/windows.md)关于在 *Windows* 中部署Python项目的知识。