导航:首页 > 编程语言 > python如何开发文档管理

python如何开发文档管理

发布时间:2023-05-29 19:23:45

python主要用来干嘛

整理了Python的7大就业方向,希望大家能找到适合自己的,然后学习下去,完成人生的目标。
1、Web开发(Python后端)
Python有很多优秀的Web开发框架,如Flask、Django、Bootstar等,可以帮助你快速搭建一个网站。当需要一个新功能时,用Python只需添加几行代码即可,这受到了很多初创型公司的一致欢迎。
像知乎、豆瓣、小米这样的大厂,最早的网站都是用Python搭建的,国外则更多,如YouTube 、Quora、Reddit、Instagram、Netflix等代表地球顶级流量的大站,都构建在Python之上。
平均薪资:15~20K
技能要求:前端基础、Python基础、主流Python Web框架(Flask、Django等)、数据库等
2、Python爬虫工程师
顾名思义,就是用Python收集和爬取互联网的信息,也是小伙伴们入坑Python的第一驱动力。靠人力一星期才能完成的工作,你泡着咖啡、跑10分钟爬虫即可,又装X又实用,学会Python爬虫后,即使不做程序员的工作也能加分不少。
平均薪资:15~25K
技能要求:前端基础、Python爬虫库、数据库、JS反爬等
友情提示:注意法律风险
3、Python数据分析师
这个时代,数据和黄金一样宝贵,现在最火的公司如:今日头条、抖音、快手等,产品都建立在对用户的分析之上,更不用说淘宝、京东、拼多多这些 “定制化推荐” 的老手。
可以说,所有的商业公司都需要这样一个角色,Python数据分析师也成了目前最火的职业之一。
Python是目前数据分析业务中,最常用的语言。学会Python后,基本可以满足数据分析经理的招聘需求。
平均薪资:10~25K
技能要求:统计学基础、Python的数据分析库(Pandas、NumPy、matplolib)、数据库、机器学习框架(高端职位需要)
4、AI工程师
人工智能是目前最火的方向之一,薪资待遇非常高(土豪的代名词)。从招聘网站上可以看到,80K、100K 的职位也有很多,流下了没有技术的泪水,当然这些职位的要求也相对较高。
Python是人工智能时代的头牌语言,不管是机器学习(Machine Learning)还是深度学习(Deep Learning),最常用的工具和框架都需要用Python调用,如Numpy、scipy、pandas、matplotlib、PyTorch、TensorFlow等,因此Python是人工智能工程师的必备技能之一。
薪资:20~40K
技能要求:统计学基础、Python、数据分析库、机器学习、深度学习框架
5、自动化运维工程师
运维工程师经常要监控上百台机器的运行,或同时部署的情况。使用Python可以自动化批量管理服务器,起到1个人顶10个人的效果。
自动化运维也是Python的主要应用方向之一,它在系统管理、文档管理方面都有很强大的功能。
平均薪资:15~25K
技能要求:Python、shell、linux、数据库、openpyxl库等
6、自动化测试工程师
测试的工作是枯燥和重复的,在过去,每次产品更新,都要重复测试一遍,效率低而且容易出错。
Python提供了很多自动化测试的框架,如Selenium、Pytest等,避免了大量的重复工作,Python自动化测试也变得越来越流行。
平均薪资:10~20K
技能要求:Python、自动化测试框架、Linux等
7、Python游戏开发
Python游戏开发的招聘集中在游戏服务器领域,主要负责网络游戏的服务器功能开发、性能优化等工作。
平均薪资:15~25K
技能要求:Python、Python Web框架、Linux、数据库、Nginx等
通过以上一系列的讲解,相信各位刚入门Python编程语言的人,对于Python主要用来做什么这个问题有了一定的了解。Python编程语言应用广泛,就业方向也是十分广阔,当下正是学习Python的好时机。

㈡ python主要可以做什么

Python几乎无所不能,通俗易懂、容易入门、功能强大,学习后可以从事以下工作岗位:
1. Web开发
最火的Python web框架Django,支持异步高并发的Tornado框架,短小精悍的flask,bottle,Django官方的标语把Django定义为the framework for perfectionist with deadlines(大意是一个为完全主义者开发的高效率web框架)
2. 网络编程
支持高并发的Twisted网络框架,py3引入的asyncio使异步编程变的非常简单
3. 爬虫开发
爬虫领域,Python几乎是霸主地位,Scrapy/Request/BeautifuSoap/urllib等,想爬啥就爬啥
4. 云计算开发
目前最火最知名的云计算框架就是OpenStack,Python现在的火,很大一部分就是因为云计算市场近几年的爆发
5. 人工智能
MASA和Google早期大量使用Python,为什么Python积累了丰富的科学运算库,当AI时代来临后,Python从众多编程语言中脱颖而出,各种人工智能算法都基于Python编写,由其PyTorch之后,Python作为AI时代头牌语言的位置基本确立!
6. 自动化运维
问问中国的每个运维人员,运维人员必须会的语言是什么?10个人详细会给你一个相同的答案,它的名字叫Python
7. 金融分析
金融公司使用的很多分析程序、高频交易软件就是用的Python,目前,Python是金融分析、量化交易领域里用的最多的语言
8. 科学运算
97年开始,NASA就在大量使用Python在进行各种复杂的科学运算,随着NumPy,SciPy,Matplotlib,Enthought librarys等众多程序库的开发,使得Python越来越适合做科学计算、绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更广泛
9. 游戏开发
在网络游戏开发中Python也有很多应用。相比Lua or C++,Python比Lua有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑,与Lua相比,Python更适合作为一种Host语言,即程序的入口点是在Python那一端会比较好,然后用C/C++在非常必要的时候写一些扩展。Python非常适合编写1万行以上的项目,而且能够很好的把网游项目的规模控制在10万行代码以内。
10. 桌面软件
虽然大家很少使用桌面软件了,但是Python在图形界面开发上也很强大,你可以用tkinter/PyQT框架开发各种桌面软件!

㈢ Python 包管理工具

  Python之所以受欢迎不光是因为它简单易学,更重要的是它有成千上万的宝藏库。这些库相当于是已经集成好的工具,只要安装就能在Python里使用。它们可以处理各式各样的问题,无需你再造轮子,而且随着社区的不断更新维护,有些库越来越强大,几乎能媲美企业级应用。那么这些工具库怎么下载安装呢?它们被放在一个统一的“仓库”里,名叫PyPi(Python Package Index),所有的库安装都是从这里调度。有了仓库之后,还需要有管理员,pip就是这样一个角色。

  pip 是 Python 中的标准库管理器,这意味着它是一个工具,用它可以来管理 Python 标准库中其他的包,允许你安装和管理不属于 Python 标准库的其它软件包,其提供了对 Python 包的查找、下载、安装、卸载等功能。总的来说,pip的Python第三方库的大管家,搞懂它,会让你省很多事。从Python 3 >= Python 3.4 、Python2 >= Python2.7.9 版本开始,pip默认包含在Python的安装程序中,在安装Python时将会自动被安装,省事方便。

  Python 的安装器中自带了 pip,所以你可以直接使用它,除非你安装的是更早版本的 Python。你可以通过以下命令来判断是否已安装:

如果你的 Python 环境没有安装 pip,则可以使用以下方法来手动安装。pip 安装文件下载: pypi.org/project/pip…

pip提供的命令不多,但是都很实用

  pip命令默认使用的是国外的pypi镜像(pypi.python.org),安装慢不说,有时甚至会导致出现超时等网络问题,有时候为了安装一个包,失败重试安装好几次都不一定成功。所以,使用国内的pypi镜像,亦即 切换 pip 源 ,这样速度上更有保证,不失为一种加速pip安装第三方包的好方法。常用的镜像站有阿里云、清华大学等。其中清华大学开源软件镜像站是每 5 分钟同步一次的,比较推荐使用。阿里云镜像站的速度也非常快,这也是我现在在使用的。

  切换切换 pip 源可以是临时性的,也可以设置为默认。临时性的,就是在安装包时,通过pip命令的 -i 选项指定镜像源即可。例如,临时使用阿里云镜像站作为 pip 源,可以是这样安装:

  如果每次安装时都想要通过镜像源来安装,上面的办法不免有些麻烦。我们可以修改pip的配置文件,将镜像源写入到 pip 配置文件中。 对于linux系统 ,修改 ~/.pip/pip.conf 文件 (没有就创建一个文件夹及文件,文件夹要加“.”,表示是隐藏文件夹):

然后在文件中保存如下内容:

   对于windows系统 ,在C:Users文件夹下的用户目录(例如如果当前用户是Administrator则是C:UsersAdministrator)下创建pip文件夹,然后再在此文件夹下创建pip.ini文件,在文件中写入一下内容:

  配置完成后再通过 pip config list 查看pip配置。

  我们经常会遇到这样的开发需求,比如你手头有多个开发项目,其中项目A要求用python3.7,项目B需要用python3.6,有要求项目A和项目B依赖包相互独立,互不干扰。为了满足这样的开发需求,我们需要在自己的电脑上安装多个Python版本,并且项目之间进行环境隔离。因此,我们要想运行这些项目,在工作电脑上就要安装不同版本的Python。 pyenv 是Python版本管理工具,通过系统修改环境变量来实现Python不同版本的切换,利用它可以在同一台电脑上安装多个版本的Python,设置目录级别的Python,还能创建和管理vitual python enviroments。而且所有的设置都是用户级别的操作,不需要sudo命令。

  首先安装pyenv,如果你是Mac电脑,那么推荐使用Homebrew来安装。

要想升级pyenv,则可以执行:

pyenv安装完成后,需要将$HOME/.pyenv/bin添加到PATH变量前面,这一步非常关键。

也可以采用手动安装的方式,将pyenv检出到你想安装的目录。

  添加环境变量,将PYENV_ROOT 指向 pyenv 检出的根目录,并向 $PATH 添加 $PYENV_ROOT/bin 以提供访问 pyenv命令的路径。这里的 shell 配置文件(~/.bash_profile)依不同系统而需作修改,如果使用 Zsh 则需要相应的配置 ~/.zshrc
在使用 pyenv 之后使用 pip 安装的第三方模块会自动安装到当前使用 python 版本下,不会和系统模块产生冲突。使用 pip 安装模块之后,如果没有生效,记得使用 pyenv rehash 来更新。

安装完pyenv,可以安装Python,首先查看可安装的Python版本:pyenv install -l,接下来开始安装Python

执行命令 pyenv versions 查看安装结果。

可以看到,已经成功安装了Python,安装的位置在 /Users/dllwh/.pyenv。

可以看到,3.9.9 前面有一个星号,说明成功切换到了 3.9.9 版本,可以执行一下python来验证。

  Pipenv 是 Python 官方推荐的包管理工具,它综合了 virtualenv、pip 和 pyenv 三者的功能,你可以使用 pipenv 这一个工具来安装、卸载、跟踪和记录依赖性,并创建、使用和组织你的虚拟环境。

如果你是Mac电脑,那么推荐使用Homebrew来安装和升级pipenv:

也可以通过pip来安装和升级pipenv:

进入到项目目录中,通过下面的指令为项目创建虚拟环境。

  上面的操作,给pipenv_demo这个项目初始化了一个 Python 3.9.9 的虚拟环境,并在项目录下生成一个项目依赖包文件 Pipefile。如果系统中没有 3.9.8 版本的Python,pipenv 会调用 pyenv 来安装对应的 Python 的版本。默认地,虚拟环境会创建在 ~/.local/share/virtualenvs目录里面。我们也可以通过 pipenv --venv查看项目的虚拟环境目录。可以通过 pipenv --rm 删除虚拟环境。
如果想更改虚拟环境的目录,可以在 .bashrc 或 .bash_profile 中,设置环境变量WORKON_HOME,指定虚拟环境的目录所在位置,比如想将虚拟环境放到~/.venvs目录,则可以执行下面的命令。

如果希望在项目目录下创建虚拟环境目录(.venv),需要在 .bashrc 或 .bash_profile 中配置环境变量PIPENV_VENV_IN_PROJECT:

  pipenv使用 Pipfile 和 Pipfile.lock 来管理依赖包,并且在使用pipenv添加或删除包时,自动维护 Pipfile 文件,同时生成 Pipfile.lock 来锁定安装包的版本和依赖信息。相比pip需要手动维护requirements.txt 中的安装包和版本,具有很大的进步。

  为项目安装依赖包到虚拟环境中,使每个项目拥有相互独立的依赖包,是非常不错的Python的开发实践。安装依赖包到虚拟环境中的方法:

执行完上面的命令后,检查一下是否安装成功:

  观察项目的根目录下,又多了一个 Pipfile.lock 文件。这两个文件记录了此项目的依赖包,这两个文件的区别是 Pipfile 中安装的包不包含包的具体版本号,而Pipfile.lock 是包含包的具体的版本号的。如果不想产生 Pipfile.lock 文件,在安装依赖包的时候,加上 –skip-lock 选项即可。
在使用pipenv的时候,常常会安装过程比较慢,这个是因为pipenv创建的 Pipfile 中默认的Pypi源是python官方的 pypi.python.org/simple。我们国内…

  为了避免每次都要指定–pypi-mirror,我一般会在创建好Pipfile以后,将文件中 source 块下的 url 字段,设置为国内的 pypi 源,我推荐的是清华的Pypi源或者阿里源,具体设置如下:

如果是要删除虚拟环境中的第三方包,执行:

用git管理项目时候,要把Pipfile和Pipfile.lock加入版本跟踪。这样clone了这个项目的同学,只需要执行:

就可以安装所有的Pipfile中 [packages]部分列出来的包了,并且自动为项目在自己电脑上创建了虚拟环境。

上面的方法都是安装Pipfile中列出来的第三方包的最新版本,如果是想安装Pipfile.lock中固定版本的第三方依赖包,需要执行:

如果项目之前使用requirements.txt来管理依赖的,那么使用pipenv安装所有依赖可以采用类似pip的方法:

  虚拟环境创建好了之后,就可以在里面进行开发了。如果在命令行下开发,则在项目目录下执行 pipenv shell ,就进入到了虚拟环境中,在这个环境中,已经包含安装过的所有依赖包了,接下来就可以利用这些依赖包进行开发工作了。如果是用Pycharm进行开发,就更简单了,直接用Pycharm打开项目即可。可以从Pycharm中的左侧导航栏里面看到External Libraries显示的是虚拟环境中的Python解释器了。
在虚拟环境中执行开发好的程序,有两种方式,一种是前面提到的先执行pipenv shell进入到虚拟环境后,再执行python程序;另一种方式,则是执行pyenv run,比如在虚拟环境中执行基于pytest框架编写的测试用例,只需要执行下面的命令即可:


作者:独泪了无痕
链接:https://juejin.cn/post/7063699409703272485

㈣ Python学习,有哪些方向可以选择

Python的就业方向有很多,但是只有选择适合自己的才能支撑自己走得更远。

1、常规软件开发

Python支持函数式编程和OOP面向对象编程,能够承担任何种类软件的开发工作,因此常规的软件开发、脚本编写、网络编程等都属于标配能力。

2、爬虫

顾名思义,就是用Python收集和爬取互联网的信息,也是很多小伙伴们学习Python的第一驱动力,总觉得Python就是天然为爬虫而生,简单快速,可能靠人力一周才能完成的工作,你泡着咖啡、跑10分钟爬虫即可,真的非常有成就感。无论营销、运营还是产品经理,高效获取有效数据已成为职场必备技能。

3、Python数据分析

如今公司的产品都建立在对用户的分析之上,也就是所有的商业公司都需要这样一个角色,学会了爬虫,便有了数据来源,运用这些数据以及相应的爬虫库和excel表格,就可以进行简单的数据分析。

4、Python Web网站工程师

Web一直都是不可忽视的存在,利用Python的框架做一些页面精美的网站,Python有很多优秀的Web开发框架,如Flask、Django、Bootstar 等,可以帮助你快速搭建一个网站。

5、人工智能

Python是人工智能时代的头牌语言,不管是机器学习(Machine Learning)还是深度学习(Deep Learning),最常用的工具和框架都需要用Python调用,Python是人工智能工程师的必备技能之一。

6、自动化运维工程师

运维是必须而且一定要掌握Python语言,使用Python可以自动化批量管理服务器,起到1个人顶10个人的效果。它在系统管理、文档管理方面都有很强大的功能。

7、Python自动化测试工程师

Python语言对测试的帮助是非常大的,自动化测试中Python语言的用途很广,Python提供了很多自动化测试的框架,如Selenium、Pytest等,避免了大量的重复工作,Python自动化测试也变得越来越流行。

8、游戏开发

游戏服务器领域,主要负责网络游戏的服务器功能开发、性能优化等工作。


Python没有非常强势的问题,但是它简单的语言结构应用非常广泛,无论上述你选择哪个方向,都是不会错的。

㈤ python能做什么只要应用于哪些方面应该如何学习

Python是一门简单、易学并且很有前途的编程语言,很多人都对Python感兴趣,但是当学完Python基础用法之后,又会产生迷茫,尤其是自学的人员,不知道接下来的Python学习方向,以及学完之后能干些什么?以下是Python十大应用领域!
1. WEB开发
Python拥有很多免费数据函数库、免费web网页模板系统、以及与web服务器进行交互的库,可以实现web开发,搭建web框架,目前比较有名气的Python web框架为Django。从事该领域应从数据、组件、安全等多领域进行学习,从底层了解其工作原理并可驾驭任何业内主流的Web框架。
2. 网络编程
网络编程是Python学习的另一方向,网络编程在生活和开发中无处不在,哪里有通讯就有网络,它可以称为是一切开发的“基石”。对于所有编程开发人员必须要知其然并知其所以然,所以网络部分将从协议、封包、解包等底层进行深入剖析。
3. 爬虫开发
在爬虫领域,Python几乎是霸主地位,将网络一切数据作为资源,通过自动化程序进行有针对性的数据采集以及处理。从事该领域应学习爬虫策略、高性能异步IO、分布式爬虫等,并针对Scrapy框架源码进行深入剖析,从而理解其原理并实现自定义爬虫框架。
4. 云计算开发
Python是从事云计算工作需要掌握的一门编程语言,目前很火的云计算框架OpenStack就是由Python开发的,如果想要深入学习并进行二次开发,就需要具备Python的技能。
5. 人工智能
MASA和Google早期大量使用Python,为Python积累了丰富的科学运算库,当AI时代来临后,Python从众多编程语言中脱颖而出,各种人工智能算法都基于Python编写,尤其PyTorch之后,Python作为AI时代头牌语言的位置基本确定。
6. 自动化运维
Python是一门综合性的语言,能满足绝大部分自动化运维需求,前端和后端都可以做,从事该领域,应从设计层面、框架选择、灵活性、扩展性、故障处理、以及如何优化等层面进行学习。
7. 金融分析
金融分析包含金融知识和Python相关模块的学习,学习内容囊括Numpy\Pandas\Scipy数据分析模块等,以及常见金融分析策略如“双均线”、“周规则交易”、“羊驼策略”、“Dual Thrust 交易策略”等。
8. 科学运算
Python是一门很适合做科学计算的编程语言,97年开始,NASA就大量使用Python进行各种复杂的科学运算,随着NumPy、SciPy、Matplotlib、Enthought librarys等众多程序库的开发,使得Python越来越适合做科学计算、绘制高质量的2D和3D图像。
9. 游戏开发
在网络游戏开发中,Python也有很多应用,相比于Lua or C++,Python比Lua有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑,Python非常适合编写1万行以上的项目,而且能够很好的把网游项目的规模控制在10万行代码以内。
10. 桌面软件
Python在图形界面开发上很强大,可以用tkinter/PyQT框架开发各种桌面软件!
以上是Python十大应用领域和就业方向,对于学习Python不知道能干什么,很迷茫的同学可以作为一个学习指导!

㈥ python怎么运行py文件

1、首先在资源管理器里复制一下py文件存放的路径,按下windows键+r,在运行里输入cmd,回车打开命令行:

㈦ python语言主要是做什么的

python是一款应用非常广泛的脚本程序语言,谷歌公司的网页就是用python编写。python在生物信息、统计、网页制作、计算等多个领域都体现出了强大的功能。python和其他脚本语言如java、R、Perl 一样,都可以直接在命令行里运行脚本程序。使用Python编程的方法/步骤:1、首先下载安装python,建议安装2.7版本以上,3.0版本以下,由于3.0版本以上不向下兼容,体验较差。2、打开文本编辑器,推荐editplus,notepad等,将文件保存成 .py格式,editplus和notepad支持识别python语法。脚本第一行一定要写上 #!usr/bin/python表示该脚本文件是可执行python脚本如果python目录不在usr/bin目录下,则替换成当前python执行程序的目录。3、编写完脚本之后注意调试、可以直接用editplus调试。调试方法可自行网络。脚本写完之后,打开CMD命令行,前提是python 已经被加入到环境变量中,如果没有加入到环境变量,请网络。4、在CMD命令行中,输入 “python” + “空格”,即 ”python “;将已经写好的脚本文件拖拽到当前光标位置,然后敲回车运行即可。
更多Python相关技术文章,请访问Python教程栏目进行学习!以上就是小编分享的关于python语言主要是做什么的的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!

㈧ python可以用来干什么

1、系统编程:提供API,能方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具,这也是国外为什么使用者这么多的原因,我们国内很少使用Linux。
2、图形处理:有PIL、Tkinter等图形库支持,能方便进行图形处理。
3、数学处理:NumPy扩展提供大量与许多标准数学库的接口。
4、文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。
5、数据库编程:程序员可通过遵循Python DB-API规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。
6、网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。
7、Web编程:应用的开发语言,支持最新的XML技术。使用python也可能制作网站哦。
8、多媒体应用:Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。
9、pymo引擎:这是一款运行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memories off)风格的AVG游戏,故命名为PYMO。可以开发一些手机上的软件。
10、黑客编程:python有一个hack的库,可以大大减少编程的工作量,很多本来很复杂的工作,可以很容易实现。

㈨ 如何创建python开发环境

搭建Python语言IDE开发环境方法:
1、下载并安装Python For Windows。打开Python官方网站(python.org),推荐下载Python 2.7.X版本。
2、安装Python:一路默认设置Next下去,直到Finish,完成Python安装3、推荐使用PyCharm: PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。
4、下载PyCharm集成开发软件,官网提供了两种版本:Professional Edition(专业版可以试用30天,学习Python30天也够用了。,Community Edition(社区版,功能少一点但也够用了)。
5、安装PyCharm集成开发软件:一路默认设置Next下去,直到Finish,完成PyCharm的安装。
6、配置PyCharm一:风格(配色方案)的调整::【File】→【Settings】→【 Editor】→【Colors & Fonts】→Scheme选择Dracula注意事项:每天第一次启动有点慢,第二次就快了。主题Scheme选择以后,需要重启软件才能生效高分辨率下,Pycharm的字体显得很小,可以在Colors & Fonts选项里设置。但先要复制一个Scheme才能更改字体大小

㈩ python是如何被开发的

本文出自《Python高手之路》中的Doug Hellmann访谈。

我曾经有幸和Doug Hellmann一起工作过数月。他在DreamHost是一位非常资深的软件开发工程师,同时他也是OpenStack项目的贡献者。他发起过关于Python的网站Python Mole of the Week(),也出版过一本很有名的Pyhton书The Python Standard Library By Example(),同时他也是Python的核心开发人员。我曾经咨询过Doug关于标准库以及库的设计与应用等方面的问题。
当你从头开发一个Python应用时,如何迈出第一步呢?它和开发一个已有的应用程序有什么不同?
从抽象角度看步骤都差不多,但是细节上有所不同。相对于对比开发新项目和已有项目,我个人在对应用程序和库开发的处理方式上有更多的不同。
当我要修改已有代码时,特别是这些代码是其他人创建的时,起初我需要研究代码是如何工作的,我需要改进哪些代码。我可能会添加日志或是输出语句,或是用pdb,利用测试数据运行应用程序,以便我理解它是如何工作的。我经常会做一些修改并测试它们,并在每次提交代码前添加可能的自动化测试。
创建一个新应用时,我会采取相同的逐步探索方法。我先创建一些代码,然后手动运行它们,在这个功能可以基本调通后,再编写测试用例确保我已经覆盖了所有的边界情况。创建测试用例也可以让代码重构更容易。
这正是smiley()的情况。在开发正式应用程序前,我先尝试用Python的trace API写一些临时脚本。对于smiley我最初的设想包括一个仪表盘并从另一个运行的应用程序收集数据,另一部分用来接收通过网络发送过来的数据并将其保存。在添加几个不同的报告功能的过程中,我意识到重放已收集的数据的过程和在一开始收集数据的过程基本是一样的。于是我重构了一些类,并针对数据收集,数据库访问和报告生成器创建了基类。通过让这些类遵循同样的API使我可以很容易地创建数据收集应用的一个版本,它可以直接将数据写入数据库而无需通过网络发送数据。
当设计一个应用程序时,我会考虑用户界面是如何工作的,但对于库,我会专注于开发人员如何使用其API。通过先写测试代码而不是库代码,可以让思考如何通过这个新库开发应用程序变得更容易一点儿。我通常会以测试的方式创建一系列示例程序,然后依照其工作方式去构建这个库。
我还发现,在写任何库的代码之前先写文档让我可以全面考虑功能和流程的使用,而不需要提交任何实现的细节。它还让我可以记录对于设计我所做出的选择,以便读者不仅可以理解如何使用这个库,还可以了解在创建它时我的期望是什么。这就是我用在stevedore上的方法。
我知道我想让stevedore能够提供一组类用来管理应用程序的插件。在设计阶段,我花了些时间思考我见过的使用插件的通用模式,并且写了几页粗略的文档描述这些类应该如何使用。我意识到,如果我在类的构造函数中放最复杂的参数,方法map()几乎是可互换的。这些设计笔记直接写进了stevedore官方文档的简介里,用来解释在应用程序中使用插件的不同模式和准则。
将一个模块加入Python标准库的流程是什么?
完整的流程和规范可以在Python Developer's Guide()中找到。
一个模块在被加入Python标准库之前,需要被证明是稳定且广泛使用的。模块需要提供的功能要么是很难正确实现的,要么是非常有用以至于许多开发人员已经创建了他们自己不同的变种。API应该非常清晰并且它的实现不能依赖任何标准库之外的库。
提议一个新模块的第一步是在社区通过python-ideas邮件列表非正式地了解一下大家对此的感兴趣程度。如果回应很积极,下一步就是创建一个Python增强提案(PythonEnhancement Proposal,PEP),它包括添加这个模块的动因,以及如何过渡的一些实现细节。
因为包的管理和发现工作已经非常稳定了,尤其是pip和Python Package Index(PyPI),因此在标准库之外维护一个新的库可能更实用。单独的发布使得对于新功能和bug修复(bugfix)的更新可以更频繁,对于处理新技术或API的库来说这尤其重要。
标准库中的哪三个模块是你最想人们深入了解并开始使用的?
最近我做了许多关于应用程序中动态加载扩展方面的工作。我使用abc模块为那些作为抽象基类进行的扩展定义API,以帮助扩展的作者们了解API的哪些方法是必需的,哪些是可选的。抽象基类已经在其他一些语言中内置了,但我发现很多Python程序员并不知道Python也有。
bisect模块中的二分查找算法是个很好的例子,一个广泛使用但不容易正确实现的功能,因此它非常适合放到标准库中。我特别喜欢它可以搜索稀疏列表,且搜索的值可能并不在其中。
collections模块中有许多有用的数据结构并没有得到广泛使用。我喜欢用namedtuple来创建一些小的像类一样的数据结构来保存数据但并不需要任何关联逻辑。如果之后需要添加逻辑的话,可以很容易将namedtuple转换成一个普通的类,因为namedtuple支持通过名字访问属性。另一个有意思的数据结构是ChainMap,它可以生成良好的层级命名空间。ChainMap能够用来为模板解析创建上下文或者通过清晰的流程定义来管理不同来源的配置。
许多项目(包括OpenStack)或者外部库,会在标准库之上封装一层自己的抽象。例如,我特别想了解对于日期/时间的处理。对此你有什么建议吗?程序员应该坚持使用标准库,还是应该写他们自己的函数,切换到其他外部库或是开始给Python提交补丁?
所有这些都可以。我倾向于避免重复造轮子,所以我强烈主张贡献补丁和改进那些能够用来作为依赖的项目。但是,有时创建另外的抽象并单独维护代码也是合理的,不管在应用程序内还是作为一个新的库。
你提到的例子中,OpenStack里的timeutils模块就是对Python的datetime模块的一层很薄的封装。大部分功能都简短且简单,但通过将这些最常见的操作封装为一个模块,我们可以保证它们在OpenStack项目中以一致的方式进行处理。因为许多函数都是应用相关的,某种意义上它们强化了一些问题决策,例如,字符串时间戳格式或者“现在”意味着什么,它们不太适合作为Python标准库的补丁或者作为一个通用库发布以及被其他项目采用。
与之相反,我目前正致力于将OpenStack的API服务项目从早期创建时使用的WSGI框架转成采用一个第三方Web开发框架。在Python中开发WSGI应用有很多选择,并且当我们可能需要增强其中一个以便其可以完全适应OpenStack API服务器的需要时,将这些可重用的修改贡献对于维护一个“私有的”框架似乎更可取。
当从标准库或其他地方导入并使用大量模块时,关于该做什么你有什么特别的建议吗?
我没有什么硬性限制,但是如果我有过多的导入时,我会重新考虑这个模块的设计并考虑将其拆到一个包中。与上层模块或者应用程序模块相比,对底层模块的这种拆分可能会发生得更快,因为对于上层模块我期望将更多片段组织在一起。
关于Python 3,有什么模块是值得一提而且能令开发人员有兴趣深入了解的?
支持Python 3的第三方库的数量已经到了决定性的时刻。针对Python 3开发新库或应用程序从未如此简单过,而且幸亏有3.3中加入的兼容性功能使同时维护对Python 2.7的支持也很容易。主要的Linux发行版正在致力于将Python 3默认安装。任何人要用Python创建新项目都应该认真考虑对Python 3的支持,除非有尚未移植的依赖。目前来说,不能运行在Python 3上的库基本会被视为“不再维护”。
许多开发人员将所有的代码都写入到应用程序中,但有些情况下可能有必要将代码封装成一个库。关于设计、规划、迁移等,做这些最好的方式是什么?
应用程序就是“胶水代码”的集合用来将库组织在一起完成特定目的。起初设计时可以将这些功能实现为一个库,然后在构建应用程序时确保库的代码能够很好地组织到逻辑单元中,这会让测试变得更简单。这还意味着应用程序的功能可以通过库进行访问,并且能够被重新组合以构建其他应用程序。未能采用这种方法的话意味着应用程序的功能和用户界面的绑定过于紧密,导致很难修改和重用。
对于计划开始构建自己的Python库的人们有什么样的建议呢?
我通常建议自顶向下设计库和API,对每一层应用单一职责原则(Single Responsibility Principle,SRP)()这样的设计准则。考虑调用者如何使用这个库,并创建一个API去支持这些功能。考虑什么值可以存在一个实例中被方法使用,以及每个方法每次都要传入哪些值。最后,考虑实现以及是否底层的代码的组织应该不同于公共API。
SQLAlchemy是应用这些原则的绝好例子。声明式ORM、数据映射和表达式生成层都是单独的。开发人员可以自行决定对于API访问的正确的抽象程度,并基于他们的需求而不是被库的设计强加的约束去使用这个库。
当你随机看Python程序员的代码时遇到的最常见的编程错误是什么?
Python的习惯用法和其他语言的一个较大的不同在于循环和迭代。例如,我见过的最常见的反模式是使用for循环过滤一个列表并将元素加入到一个新的列表中,然后再在第二个循环中处理这个结果(可能将列表作为参数传给一个函数)。我通常建议将过滤循环改成生成器表达式,因为生成器表达式,更有效也更容易理解。列表的组合也很常见,以便它们的内容可以以某种方式一起被处理,但却没有使用itertools.chain()。
还有一些我在代码评审时给出的更细小的建议,例如,使用dict()而不是长的if:then:else块作为查找表,确保函数总是返回相同的类型(如一个空列表而不是None),通过使用元组和新类将相关的值合并到一个对象中从而减少函数的参数,以及在公共API中定义要使用的类而不是依赖于字典。
有没有关于选择了一个“错误”的依赖的具体的例子是你亲身经历或目睹过的?
最近,我有个例子,pyparsing()的一个新发布取消了对Python 2的支持,这给我正在维护的一个库带来了一点儿小麻烦。对pyparsing的更新是个重大的修改,而且是明确标识成这样的,但是因为我没有在对cliff()的设置中限制依赖版本号,所以pyparsing的新发布给cliff的用户造成了问题。解决方案就是在cliff的依赖列表中对Python 2和Python 3提供不同的版本边界。这种情况突显了理解依赖管理和确保持续集成测试中适当的测试配置的重要性。
你怎么看待框架?
框架像任何工具类型一样。它们确实有帮助,但在选择框架时要特别谨慎,应确保它能够很好地完成当前的工作。
通过抽取公共部分到一个框架中,你可以将你的开发精力专注于应用中独特的方面。通过提供许多类似运行在开发模式或者写一个测试套件这样的引导代码,它们还可以帮你让一个应用程序迅速达到一个可用的状态而不是从头开发。它们还可以激励你在应用程序开发过程中保持一致,这意味着最终你的代码将更易于理解且更可重用。
虽然使用框架时还有其他一些潜在的缺点需要注意。决定使用某个特定框架通常能够反映应用程序本身的设计。如果设计的限制不能从根本上符合应用程序的需求,那么选择错误的框架会令应用的实现变得更难。如果你试着使用与框架建议不同的模式或惯用方式,你最终将不得不同框架做斗争。

阅读全文

与python如何开发文档管理相关的资料

热点内容
压缩空气喷射器 浏览:488
python提高效率 浏览:796
华为文件管理怎么样输入解压码 浏览:800
深思加密狗初始化 浏览:566
黄金崩溃pdf 浏览:309
华为特定短信息加密 浏览:375
微机原理与单片机技术李精华答案 浏览:816
pic12c508单片机 浏览:309
androidgps调用 浏览:226
金文编pdf 浏览:445
14乘87减147的简便算法 浏览:473
怎么创建edu文件夹 浏览:721
算法的基础问题 浏览:256
苹果手机怎么选择app支付 浏览:856
访问加密服务器失败怎么回事 浏览:439
程序员每天跑步5公里 浏览:789
党员对程序员有帮助么 浏览:550
慢跑穿压缩衣还是紧身衣 浏览:214
什么服务器引擎最好 浏览:497
日立制冷压缩机 浏览:777