热心冰块
作者热心冰块·2022-01-12 15:41
项目经理·浪潮INSPUR

Python编程之陨石坑

字数 1924阅读 725评论 0赞 0

最近投了几期稿,黄岛主等兄弟给了一些反馈,普遍都说大家爱观惨。好吧如大家愿的奉上一期陨石天坑之Python代码,写一写我碰到过的坑。少废话,上坑:
1.跨平台运行代码报错(IndentationError)
刚写Python那阵犯过的错误,一会Tab一会空格,也没用正经的IDE,NotePad++上来就装逼,Win下运行还算顺利,放到服务器在Linux下运行,就开始报错,某某行写的很清楚,打开*.py看没啥毛病啊,翻译了一下所是缩进问题,好吧,我删了从新缩进,嗯,这行不报错了,下一行报错了。
最后用替换,批量的吧Tab替换为4空格,问题解决了
最终用上了正经的IDE——PyCharm就没再出现过这个问题,因为Tab键被自动转换成4空格了
2.语法上的空格还是()错误
最最常见的就是print的参数是用空格还是(),这个是开始写3.x程序的同学,后来去写2.x程序常犯的错误,因为我是双修,2.x的Docs和3.xDocs都看过,也掉过这个坑。

上图可用看到,我安装的Python 3.10.1 For Win,在Python 3.x中Print的参数只能用()框起来,不能使用空格隔开。

这条我只是举个栗子,3.x和2.x还有好多区别,回头我整理一下网上的资料转发出来吧,大家也可以直接去搜索,文章很多。

3.多线程控制不好能把机器跑死

我曾经用Socket+thread写过一个端口转发程序,小数据量还好,长时间大数据量程序就完蛋了,程序的逻辑是用While做一个死循环,循环体就是监听指定端口,有数据了按照规则文件转发给指定IP的指定端口,因为不知道啥时候关闭目标IP的链接,所以长时间、大数据量后进程数会越来越多,最后死掉。现在看来应该找找Timeout参数,让他控制下进程数量会好一些

4.不先思考清楚逻辑,上来就写

刚刚看完资料那可真是,啥都想写,又不知道写啥,经常想到哪写到哪,最后发现越写越多,越写越乱,报错了都不知道哪的问题。后来沉淀了一段时间后发现一个规律:

4.1.数据结构是门非常好的学科,我现在手里还有一本C语言版本的《编程珠玑》,就是讲数据结构的,很薄,大概6-7MM吧,还是那句话不写大程序,了解一些常用的算法即可。结论:多了解前人总结的一些算法,可以拿来像定律、定理一样使用,不用去自己总结了。

4.2.小程序可以忽略这条,我当时是帮领导做个排序程序,上来就双循环嵌套做了个冒泡,功能实现了,但效率是真特么低,毕竟Python不是C,本来就慢,后来我查到了List[].sort()一个内置的方法就可以实现,而且效率非常的高,应该是优化过算法或是用C重写的库文件,所以执行效率很高。因此,结论是:遇到问题尽可能的用自带的方法、函数去解决问题,自己写的内容在执行效率上不一定是最好的。

4.3.无论写什么东西,先把程序逻辑想清楚,然后在看语音是否能实现,或者实现起来是否复杂。不要边写边想,效率低还爱出问题,最好能先画一个逻辑流程图,按照流程图去写代码效率会很高,出问题很可能是逻辑流程的问题。

4.4.不熟悉的情况下不要在正式代码中用一些比较偏的方法、语句,如lambda、map、reduce、Thread等,因为不熟悉贸然使用报错基本无法定位问题,建议先在实验环境玩熟悉了再正式应用,多看资料的同时也多写实验代码,哪怕是资料里的样例也自己写一下执行看看结果,很多时候样例不一定在你的环境就是一样的结果。

5.Python可以做很多事情,但不是所有的事情都是你要做的,刚学Python,听说是万能胶,就啥都想尝试,尝试过Django写Web Page,尝试过微信公众号,尝试过爬虫,尝试过数据库访问,尝试过NodeJS to Python(我哥们写的),尝试过Tkinter,尝试过Qt,尝试过Socket,尝试过SSH,等等等等等。最后回眸一瞅,我这个职业用的最多的就是Paramiko的SSH和一些基础的模块其他的都是多余的,也许奔着做产品可能会需要做的很漂亮,但我用不到,我只要功能。一堆设备需要重复操作,怎么办,Paramiko是最好的选择;一堆设备需要测试网络通不通,多线程或多进程加个第三方程序NirCMD截图是最好的选择。这里说的两个例子都是根据我工作中的具体需求写的小程序,常常是让原来要10几人天的工作,用了1-2人天就搞定了(还包括我写程序的时间)。这几个例子完美的佐证了前文所述结论:目标明确是快速编写的前提。

接下来做个小采访,想听听各位的意见,接下来的时间我想出几期互动连载,形式不是我说大家听的模式,我想这样做:我出题目(大家有好的题目也可以留言给我),大家提交自己的代码,在互动中互相学习,不知道大家觉得怎么样?

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广