不仅仅是学生在用pycharm, 我在奔驰、OPPO的时候身边的许多算法工程师也都在用Pycharm,而且我最近刚刚开源的一款自动驾驶仿真架构(GitHub - ucla-mobility/OpenCDA: A generalized framework for prototyping full-stack cooperative driving automation applications under CARLA+SUMO.)也是在Pycharm下完成的。可以说这是一款老少皆宜,童叟无欺的良心IDE! 已经有很多答案做了Pycharm和其他ide的比较,这里我着重讲一下不同阶段的Python写手都能用到Pycharm哪些强大的功能。
写Python 3天
- 虚拟环境选择。 通过 File->settings->Project Interpreter, 你可以一键选择你要做的项目的python虚拟环境,它可以是conda环境,可以是virtualenv, 也可以是系统自带的python。
2. 语法错误标错与高亮。新手初学python经常会犯的一些低级错误Pycharm都可以自动检测,并且告诉你哪里出错的原因是什么。如下图的代码所示,该代码犯了数个新手常犯的错误,比如indent没有对上(b=2 和 a=1没有对齐); for循环的in后面必须跟着一个iterable的变量,而这里却给了一个整数; c被赋值了一个从未出现过的变量empty; d=10这行代码是无法被reach的。而这些错误都被Pycharm标了出来,如果你把鼠标放到对应语句的旁边,还会告诉你错误出在哪(比如图中所示 Expected 'collections.iterable', got 'int' instead)。
3. 语法自动补齐与提示。新手在调包时,很多时候会忘记某个函数I的具体名字以用法,而Pycharm就能在你打了一两个关键字后便帮你找到完整的函数,并提醒你该函数需要哪些输入。以下图为例,用户想使用numpy的concatenate功能,只打了一个字母c Pycharm便找到了对应的函数(下图一)。当用户还在思考这个函数需要什么输入时,Pycharm便已经提示了出来(下图二)。这个功能十分强大,可以说是核心功能之一,它可以大大增加你的效率。
4. 函数自动跳转功能。只要对着函数按住ctrl+鼠标左键, 就会跳到该函数的源码处。
OpenCDA代码展示
5. 自动修正格式功能。新手在写python时很多时候会不注意整洁的格式,譬如等号后面不加空格,一行代码过长等等,用ctrl+alt+enter可以瞬间让你的代码整齐许多!
图片来源:pycharm官方博客
6. 自动安装与引用library. 当你想用到某个python第三方库的函数,却还没有引用/安装该库时,Pycharm可以自动帮你安装并引用该库,你只需要按一下 ALT+ENTER!
写Python 3个月
一般Python写了三个月之后,会开始上手一些稍微复杂的项目,这个时候代码结构会变得复杂,开始容易出现一些比较难找的bug, 代码文档的整洁也变得重要,而Pycharm的一些更高阶的功能可以很好地应付这些问题。
- debug功能。这个功能在我看来是Pycharm里最核心的一个feature. 你只需要在你的代码左边轻点一下,便会出现一个红色按钮(下图中左侧红圈内的按钮),表示程序运行时会停在该行代码处,再按一下右上角的昆虫标志的图标(上方画红圈的地方),便轻松的进入了debug模式!
图中代码来源: OpenCDA
当你进入debug模式之后,可以逐行运行代码,同时看到所有的变量的数值,甚至可以改变变量的数值。我平时照着源码读论文时经常通过看矩阵变量的shape来帮助自己理解算法。
如图所属,程序里所有变量数值都被展示出来了
另外,debug模式还支持条件断点,即只有在满足你所设定的条件下,程序才会停在你所设定的代码处。如下图所示,在debug的红点处点击鼠标右键,即可输入条件。在我给定的这个例子里,只有在变量 apply_ml 为True时,程序才会停在你标定的那行代码上。这个功能在你debug程序异常表现时尤其有用。
2. Python风格规范。docstring的风格一致、格式规范在你参与开源项目时是十分重要的,而Pycharm支持你设定多种风格(常见的有Google style, numpy style等等),并且可以根据你的函数定义自动生成docstring模板,会帮你省去不少时间。如下面动图演示,只要你在函数下面打印六个 " , 再按下回车,docstring模板就立刻生成了!
图中代码来源: OpenCDA
另外有些小伙伴可能会注意到,Pycharm界面中间有道竖着的白线,这个线就代表着你一行代码最大的列数,一旦你有某行代码过长,它会提醒你注意换行保持代码整洁。这个最大的列数也是可以设置的,通过Settings->Editor->Code Styple->Hard Warp at框中的数字改变,我一般会设置成79,与flake8保持一致。
3. 自动检测Parent class成员变量。Pycharm里还有一个很实用的feature, 当你class child继承了另一个class parent后,你在child class编写任何函数时,Pycharm可以自动探测到parent的成员变量和函数,方便你直接引用。
写Python 3年
对于已经写了三年的老鸟来说,参与开源项目或者较大规模的工业项目已经算是家常便饭了,这个时候单元测试、git版本管理、代码效率提升也变得十分重要。
- 一键单元测试。将你所有的单元测试代码都放到test目录下,点击右键便可以选择运行/debug你所有的单元测试。测试的结果与中间log信息都会被详细地展示在console里。
2. Git管理。如下图所示,Pycharm会自动将你自上次commit以来的变动标出,蓝色代表你的这行代码较以前有所改变,绿色代表这是新的一行代码。同时Pycharm的工具栏上侧有个git选项,可以在里面找到各种常见的git操作,例如merge, commit, rebase等等, 甚至还可以比较当前版本和某个commit版本的不同,妈妈再也不用担心我忘记指令了!
3. Profile功能(Professional版本才有, 学生可以拿到免费License: Free Educational Licenses - Community Support)。Pycharm的profiling可以分析每一个module的呼叫次数,运行时间,并且给出一张完整的函数调用流程图,有助于用户很好地分析程序瓶颈究竟在何处。
模块运行时间分析表格
关系分析图
写在最后:强烈建议用Pycharm时换成黑底白字保护眼睛,用白底时感觉要累瞎狗眼! |