不能一概而论。就个人而言,我在日常编程中通常会使用两个编译器——Pycharm和Jupyter。在刷算法和写爬虫的时候都会用到前者,因为我习惯用Pycharm中的Debug功能调试,很容易发现代码中的bug。后者将用于数据分析和机器学习,因为Jupyter编译器使用的IPython是交互式计算和开发环境,对数据可视化非常友好,而且这种cell的形式可以运行每一步道路。这样一来,很容易组织自己的思路,很大程度上节省了运行时间。调试的时候只需要运行错误代码的一部分,而不是全部。IPython中有一些独特的魔术命令。如果能合理地使用这些神奇的命令,将会省去很多不必要的操作,给编程带来极大的方便。这里有十个常用的魔术命令。基本常识?和??->示例:%matplotlib?,%matplotlib??后缀是?获取对象的相关信息,例如描述如何使用方法;后缀是??获取对象的更多详细信息,例如源代码。该对象可以在IPython中构建、导入或由您自己定义。%and%%->例子:%time,%%time以%为前缀被称为行魔术命令(linemagics),它只能在单个输入行上运行;%%的前缀称为单元魔法命令(cellmagics),它可以对多个输入行进行操作。1.%Ismagic和%magic如果你还不知道IPython的魔术命令,那么这两个魔术命令一定是最重要的。记住这两个命令,剩下的慢慢理解。%lsmagic的作用是列出所有存在的行魔法命令和单元格魔法命令。部分截图如下:%magic的作用是对所有的魔法命令进行详细的介绍,比如introductions,samples等,考验你的英语水平。耐心一点,慢慢理解。2、%pdb输入这条命令并运行后,如果后面的代码出现异常,这条命令会主动进入调试器,难免会出现几十行或几百行的几个或一堆bug代码。可能笨办法就是先找个断点再打印,最后删掉打印,%pdb调试发现bug直接退出,比前者方便多了。比如两个数相加时,如果不小心将整数定义为字符类型,调用函数计算时就会出错,这时就可以进入调试器进行调试了。记得最后通过exit()退出,不能直接终止cell操作。3、%debug%debug的作用和%pdb几乎一样。不同的是%pdb遇到异常自动进入调试器,而%debug是人遇到错误主动输入指令进入调试器。还是上面那种,比如调试界面如下:主动和被动调试方式,大家可以根据自己的喜好选择,我个人比较喜欢%debug。4、%who和%whos代码多了可能变量多了,变量多了可能会混淆,或者删除单元格的时候不小心删除了变量定义的单元格,%who和%whos这两个命令起着很大的作用。%who给出的信息只是全局变量的名字,而%whos给出的信息更详细,包括变量名、类型、数据。5.%time和%timeit这两个命令用于输出代码的执行时间。例如,它们可以用来粗略地比较两种算法在同一问题上的执行时间,哪一种更少。不同的是,%time只执行一次,执行时间输出一次,而%timeit执行多次,然后计算平均时间再输出。比如这里%timeit命令的输出中有7次运行,也就是总共执行了7次。这两个命令是行命令,%%time和%%timeit是单元格命令。区别同上。6.%store如果你花了很长时间清理一个文件中的一些数据,比如原始数据的缺失值填充、降维、转换等,那么你需要在另一个文件中使用同样的数据,比较笨的方法是保存数据然后在新文件中调用,但是这个操作可以用%store命令完成,我们先用%store在文件中保存一个变量。然后在另一个文件中调用这个变量:可以看到直接调用会报错,但是使用%store-r命令后,可以成功调用%store保存的变量,所以使用%store来保存,%store-r用于读取。7、%xdel和%reset命令的作用是删除变量,删除IPython中对其对象的所有引用。通常,在清洗数据时,原始数据和清洗后的数据之间会有很多步骤。我们不可能全程使用一个变量名,所以很容易在中间步骤给数据起一些相似的名字,用%xdel去掉无用的变量。删除单个变量名称以防止混淆。%reset的作用是删除所有的变量名。8.%cls清洗数据时,一般会走一步,然后输出一次数据集,观察变化。我们都知道显示数据集会占用大量的网页。久而久之,这个笔记本会很长。如果要查看文件前面的内容,不仅需要滚动很长时间,而且数据容易混淆,所以可以在每次输出数据集时使用%cls命令清空,使笔记本看起来更整洁。可以看出,如果正常的话,数据集会在data之后打印出来,但是使用%cls后,数据集的输出就被清空了。9.%%writefile如果我们要写一个函数,比如去掉中文符号的函数,这样的函数在很多情况下都可以用到,所以我们可以把这个函数写成一个单独的文件,需要的时候直接调用用它。可以使用%%writefile命令写入操作。10、%run%run命令的作用是运行脚本文件。不仅可以直接使用脚本文件中的代码,脚本文件还可以使用IPython环境中的变量。使用上面的例子,你可以使用%run命令直接运行它。11.%psource如果你在notebook中定义了一个函数,但是用了很久之后需要使用这个函数,但是你可能忘记了这个函数需要传入哪些参数,或者传入的参数应该是什么类型,在这种情况下你必须期待找到这个函数的代码,但是你可以偷懒使用%psource,这个命令是输出源代码。之前所提??也有同样的效果,只是输出形式不如%psource直观,里面夹杂了其他信息。12、%hist%hist的作用是打印所有命令行输入的历史记录,方便查看之前输入的代码信息。该命令允许设置查询的范围,即命令行输入对应的序号。其中一些魔术命令可以用常用的代码语句代替,但并不像魔术命令那样简单明了。这只是个人习惯问题。可能的话,尽量换个思路,用更方便的代码来处理问题。关注公众号【奶糖猫】获取更多精彩文章
