阈值,阙值和阀值

阈值

出现最早的词。也是比较规范的正统的词。

读音:yù
释义
1. 门坎:“立不中门,行不履阈”。
2. 界限:视阈。听阈。

阈不能与“阀(拼音[fá],注音:ㄈㄚˊ )”混淆。 “阀值”“霍值”是“阈值”一词常见的错误写法。(维基百科

阀值

这个词最早是没有的,后来国家的咬文嚼字工作组通过统计全国人民使用词语的习惯,发现了阀值这个词。这个词本身是错误的一个词,他的产生是由于把阈值误写成“阀值”。所以早期的阀值和阈值是一个概念。后来社科院的语言研究所在编制汉语词典的时候把阀值这个词收录了,最早的意思是指界定两种不同事物。再后来,阀值这个词除了具有界定两种不同事物这个意思外还具有标准线的意思。(来自知乎

基本上就是个误用。

阙值

这个词就有意思了。很多地方都是这么说的:

阙值主要在某些图像处理软件中又称为临界值,或者是差值,而这些说法都生动地表明了阙值的真正意义:它并不是一个单独存在的概念,而是两个像素之间的差值,而且,这个差值是个从低限到高限的范围。 我们决定阙值的目的正是要制定出一个范围,告诉软件只处理这个范围内的部分,而阙值之外的部分则不予处理以保持原样。

什么意思,比如说Photoshop要锐化图像,你告诉PS一个阙值,比如是10,那么相邻像素之间差值超过10就不会处理,差值在10之间的就做锐化处理。如果阙值设置为0,那么就锐化全图。

但有意思的是,很多地方在将“阙值”这个词的时候,和阈值混用了。上一段还在说的是阙值,下一段讲的是阈值。

总之,最正统的词还是“阈值”,比较推荐使用“临界值”,一定没有歧义。

社会在变化,语言也在变化。语言的功能就是人类之间沟通和交流,大家明白意思、没有歧义才是最主要的。

参考资料:

  1. https://www.guokr.com/question/92733/
  2. http://blog.csdn.net/proplume/article/details/77937261
 

家庭和梦想——看《寻梦环游记》

妹妹推荐我去看《寻梦环游记》这个电影,不知道为什么突然跟我说起这个,今天就去看了,看完回来,才明白她的用意。这的确是一部非常好的电影,可能是看过最好看的电影了。不愧是迪士尼出品,音乐、美术、设定和创意都和教科书一样。

本文涉及剧透,建议观看完电影之后再来阅读。

影片讲述的是,小男孩米克的太太爷爷为了音乐梦想抛弃家庭,太太奶奶不得不用做鞋的手艺抚养起整个家庭,太太奶奶为此非常恨音乐,规定以后家庭不能跟一点音乐沾边。后来这个家庭成为墨西哥有名的鞋匠家族,可能也是最不喜欢音乐的一个家庭。但是米可不喜欢做鞋子,偏偏喜欢音乐,而且幻想着成为歌王德拉库斯一样的大歌星,为全世界歌唱。米克崇拜德拉库斯,他的鸡汤金句”抓住你的时刻!”米克都铭记在心。他想偷偷背着憎恨音乐的全家人去偷歌王德拉库斯的吉他,因为音乐的诅咒,不小心在拿到吉他之后,进入到了亡灵的世界。

这个世界是这样设定的:人在死后如果被活着的人记住,就会在亡灵的世界继续存在。在每年的亡灵节,如果死人的照片如果被活人供奉,那么就可以过桥,看看活着的人。如果被遗忘了,那么就会“最终死亡”。

进入了亡灵的世界,在经历波折之后,米克竟然发现,自己的父亲是被歌王德拉库斯害死的!歌王德拉库斯和米克的父亲赫克特在表演最成功的时候,赫克特思念自己的家庭了,想要退出,却被德拉库斯毒死,德拉库斯拿走他的吉他,抢走他的歌,自己成为歌王,获得名誉。而赫克特被毒死之后,被家庭憎恨,将要被世界遗忘,面临自己的“最终死亡”。影片是一个大团圆的结局,真相公布于众,米克得到家人的祝福,死去的祖先们也原谅了赫克特。

迪士尼用老少皆宜的动画片探讨了一个非常复杂的问题:个人理想的实现和家庭之间的关系问题。本片的观点从曾曾奶奶的口中说出:“Nothing is more important then family!”家庭的意义就是给你支持,家庭是你的后盾,但也是你的责任。

我想,在决定自己要做什么这个问题上,几乎每个人都或多或少会面临与家里人的矛盾。高中毕业,很多人听家里人的决定报了志愿;大学毕业,找对象要听家里人的意见;找工作要听家里人的意见。父母也是带着自己的生活经验一起生活的,你说一家之主为了音乐放弃了家庭,把整个家庭的重担留给了一个女人,还如何让后辈再接受音乐呢?要改变父母的想法,是很困难的。《寻梦环游记》其实对这个问题讨论的很深刻了,家庭是要对孩子的想法给予理解和支持的,不要那么固执(想想其实我们也有做父母的一天),孩子呢,如果你真的有梦想,就要做好为梦想牺牲的准备。不是像歌神德拉库斯那样牺牲自己的好朋友,牺牲自己的家庭。你要吃苦啊,证明给你家里的人看,自己可以做得到,要获得他们的支持,但不要与他们为敌,不要叫他们看着,自己不需要家庭也会幸福。其实对于婚姻也是一样,家里的反对并不可怕,努力生活呀,让家庭看见,自己可以和他(她)过的很幸福啊,让爸爸妈妈祝福你们啊。

王尼玛在暴走大事件36期(Youtube观看地址)最后说:

有的家长会认为公务员就是铁饭碗,他们甚至愿意花十几万走关系,给你在公路收费站买一个月薪3000块的收费员岗位。有的家长就是认为棍棒下出孝子,他们动不动就对你施暴啊,是真心希望你将来出人头地。还有的家长就是笃信算命先生的铁齿铜牙,认定你男朋友的属相,长相,户口所在地会给你的婚姻带来不幸,都是为你好,也都是打着我是为你好这面大旗来强迫你。

但是可怜之人必有可恨之处啊,你喊着不想考公务员你想考研,谁拦得住你嘛,你自己打工赚钱给自己考研啊。你死活要娶她,谁拦得住你嘛,几十万礼金和房子你自己奋斗,不要用父母的养老金嘛。你怪你父母扔你的狗,谁拦得住你嘛,你自己租房子自己去养咯。

我是很担心你们呀,不要动不动就来求尼玛老公抱。我是不能永远坐在这里解答你的困惑的,动动脑子呀,你得反抗嘛。你父母半辈子建立起来的价值观呐,不是你顶几句嘴就可以撼动的。动动脑子,你好好商量,实在是无法沟通呢,你就靠自己嘛。证明你的选择是对的,证明你可以过得很幸福。反抗啊,知道吧,反抗啊,朋友。

魔兽争霸3的中国选手李晓峰(Sky)可以说是一个榜样了。Sky的爸爸让他做一个医生,Sky跟父亲说去打比赛,打输了回来做学医,打赢了就走自己的路。后来成了家喻户晓的传奇人物,“人皇Sky”。

那时候SKY他们都没有收入,每天只吃一顿饭,白天网吧要营业,他们只能晚上训练,睡觉的地方是网吧后面的一个小仓库,进仓库的口只有1米高,里边有一张只能睡上铺的架子床SKY每天和一个体型很大的朋友挤在那一张床上,这样的日子持续了3个月。

毛姆笔下有很多人物是一种极端,抛下自己的家庭追寻自己的梦想的。比如说《月亮与六便士》的毛姆。其实这种做法的确是很不服责任的,但是毛姆笔下的人,包括《刀锋》里面的主人公,好像都有自己的一套价值观,没有家庭的概念。可能个人理想非常崇高了吧。

另外一个影片特别感动我的地方是,人死后会快乐地生活在另一个世界,只要活着的人记住他们。唉,能这样想,算是挺大的一种安慰吧。只要我们被记住,那么也算作是一种活着。对在那个世界的人,能做的也只有是记住他们吧。

既然死去的人有世界,那么现实的世界中没有被伸张的正义,就还有时间,比如赫克特经历了那么多年无法见到自己的女儿的痛苦,最后终于让真相公布于世。

今年,社会上发生了太多让人痛心的事情。

江歌案

江歌案于2016年11月3日凌晨发生于日本东京都中野区,指法政大学研究生江歌收留闺蜜刘鑫同住,遭闺蜜前男友陈世峰跟踪上门用刀捅死的凶案。由于三人均为中国留学日本的研究生,并涉及学生住房安全的问题,凶案在留学生圈中引起回响。从案发至庭审相隔约一年,期间江歌母亲江秋莲一直为亡女追责,事件一直在互联网受关注。由于案发后刘鑫逃避与江母见面,其家人对江歌亲属冷言冷语,其漠视受害者并推卸责任的态度在中国互联网上遭到猛烈批评。一些很有影响力的微信公众号就带头对刘鑫进行“道德审判”,而疑凶陈世峰反而受到较少关注。

杭州保姆纵火案:

事情的起因是女主发现莫某偷表偷钱,想要解雇她。莫某怀恨在心,离开前还把宝宝们的金手镯等值钱物品带走。遂又想一个妙计,用“放火”的方式,掩盖偷盗的行为以表忠心,结果这场火灾,在封闭式的豪宅里成为了这个家庭最大的悲剧。最终女主和三个孩子从此离开了这个世界。(保姆纵火事实证据确凿,动机为网上流行的说法)。

以及知乎上赵先森的父亲遇车祸,肇事者却冷漠无情:《人呐 要比想象的耐艹!

杭州保姆纵火案的受害者林先生太可怜了,几乎都是《海边的曼彻斯特》现实版了,那一幕男主人说“I can’t , I just can’t”我还记忆尤新,这坎怎么过的去呢。希望他能看一下这部电影,得到一点心里的安慰,坚强的活下去吧。

以下感人的段落摘录自林先生的微博@老婆孩子在天堂

10月5日中秋节:

初识小贞那一年冬天杭州下起了雪,天好像还蒙蒙亮我就打电话给她:“下雪了下雪了,你快出来看雪”。小贞见到我就笑:“还以为什么事呢,下个雪你也大惊小怪的。”我有些难为情,嘿嘿一笑:“这可是我第一次看见雪,福建从来没下过雪的。”后来我们在雪地里牵着手走了好久好久,漫天飞雪和小贞低头抿笑的样子在那一刻,在我的心里定格了。

婚后的小贞热爱生活,也很有仪式感,每逢佳节都要把家里布置一番,圣诞节会有圣诞树,万圣节会有南瓜灯,春节就会挂上大红灯笼,去年中秋家里到处都摆放的鲜花盆景,芳香四溢。

我爱她的婉约也喜欢她的恬静。她好像是诗词中的颜如玉,清丽脱俗,对生活有自己的理解,不逐流,不强求。闲暇的时候喜欢看书、弹古筝、插花、听音乐。她每天早上六点起床常常去阳台做瑜伽练气功,或者跟我们一起去楼下做运动,傍晚我们一家五口常常在钱塘江边跑步。她的闺蜜都说她的生活状态不像是这个浮躁时代的人。

小贞的生活永远围绕着我跟孩子们。三个聪明乖巧的孩子是她内心最大的成就,阳阳更是她的骄傲,所有见到阳阳的人都会夸赞她:“你怎么那么漂亮呀?”她都会不好意思的笑一笑。小贞经常跟我说:“我们再生一个吧,下一个肯定是女儿。”我说不要了,生了三个孩子我都很心疼了,可不想她再辛苦,而且只要阳阳一个漂亮就好了。

记忆中十多年来我跟小贞从来没有单独旅游过,以前我们经常带着孩子们去万象城吃饭,吃完饭去书店,孩子们每人挑一本他们最喜欢的书,找一个角落安静的看书。柽一照看弟弟妹妹,我们或逛街或看电影,享受片刻的二人世界,再回去接他们。

有时候晚上也会让孩子们自己在家里,平时他们都睡在各自的床上,这个时候就谈起条件来了,三个人要睡在一张床上。等我们回到家,就看见三个孩子睡得东倒西歪,小贞会给他们盖好被。再点上自己调配的精油香薰,我们窝在床上追剧,看书。

有一次她说:“老公,如果有那么一天,一定要我先走,你会比我坚强,但我会受不了。”我说:“那下辈子我们还做夫妻,下辈子再遇见,我们约一个暗号(你怎么也在这里)。”她说:“我一定会先认出你。”

已经想不起当时为什么会有这样一段对话,或许一切都是命中注定。零五年我一人只身来到杭州,之后与小贞相识相爱结婚生子,一生中最幸福的日子都是与她一起。十二年,一个轮回。仿佛时光机把我拖拽回去,一切回原点,却没有抽离走记忆。

3月14日是她的生日,那一天我给她了一个惊喜。我回到家跟她说:“走,给你买生日礼物去。”车路过了好几个商场也没停,她以为我故意在逗她还假装生气:“林生斌,不是要去商场买单反吗?要去哪里呀?”最后车子在4s店停下我说:“单反随时都可以买,送你车要不要啊?”她一下子就笑了“要,不要白不要。”新车订了三个月才到,6月18日提的车,她只开了三天。

出事的前不久我还给她剪了发,镜子前坐好,我们互相调侃。她说:“我可是你唯一的vip。”我说:“我可是有四个vip,但你是vvip。”她说,最喜欢我给她剪头发,有一种古代丈夫给妻子画眉的幸福感。

对小贞的爱和感激,愧疚与自责都会伴随我一生,不会忘更不会淡。对她的亏欠和承诺,只有等来世再补。下辈子在某个街头,是谁先跟对方说:“你怎么也在这里?” 她说是她,我想是我。

明月圆,人残缺。中秋过去了,我把它当成了普通的一天,也没有太难熬。每一天都是普通的一天,节日而已,有人欢庆才是节

10月26日 阳阳生祭:

每年的十月下旬都是我们全家最热闹的时候,也是我最开心的一段日子。22日阳阳生日,24日潼潼生日,25日结婚纪念日。

我有意错过这几天,可发现根本忘不掉,越想忘记越深刻。不知道怎么熬过的那三个日子,一眨眼房间都是灰色的,再睁开,就像有一大面玻璃爆裂碎了一地,阳光再次照进房间,照进现实。

22日是阳阳的,生祭。逝去的人的生日叫生祭,往年我都是给她过生日的。现在,日子记得,只能记得。去年阳阳乌黑的长发戴着生日帽对着蜡烛默默许下的心愿是想快快长大,这是她偷偷告诉我的。

怀阳阳的时候小贞反应跟怀柽一时差不多,我们以为也是个男孩,柽一以前的名字是林睿哲,老二就打算叫林睿阳,所以后来她的小名就是阳阳。当时准备的所有衣物都是男孩子的,医生从产房出来告知是女儿的时候,我完全懵了毫无准备。等我反应过来的时候内心一阵狂喜。

我一直想要个女儿,都说女儿是爸爸上辈子的情人,在见到阳阳第一面时我就深有体会,视线都不舍得离开她,医生都说哪有小孩子刚出生就这么漂亮的,眼睛睁的又大又圆,睫毛也很长,鼻子高高的。那时候喂奶换尿布我都要抢着做,半夜也会起床帮忙,这些事情在生柽一那会儿虽然也做,但是对女儿我会更主动的想要去做。我太爱她。太爱太爱。

阳阳和柽一小时候长得非常像,她又长得比较高,很多人误以为他们是龙凤胎,有一次在车库还闹了个笑话。我们先把柽一抱上楼,接着把阳阳抱下来,有邻居看见就问:诶?你们怎么刚把孩子抱上去又抱下来了?”他俩在一起的时候很多人都以为她是姐姐,阳阳就很得意的说:“爸爸,他们都说我才是姐姐,哈哈,哥哥,以后你要叫我姐姐了。”

阳阳的老师常夸她组织能力强,平时在学校里像个小班长一样,帮老师很多忙。她也非常会照顾比她小的孩子,经常教弟弟画画看书,家里如果有小表妹小朋友做客,阳阳就会把自己漂亮衣服拿出来给她们打扮一番,教她们跳舞和她们一起做游戏。

她喜欢跳舞和画画,每次接她放学的时候都舍不得走,总是最后一个离开,总是让我再等她一下:“爸爸你再等等我,马上就画好了,不能半途而废。”阳阳的很多优点都是小贞的教育成果。她很注重课外兴趣以及性格方面的培养,几乎每个周末都带他们三个去看画展、听音乐会、逛书店,带他们陶冶艺术情操培养审美观念。只要有时间我就会陪着他们一起去,住一个晚上再回来。

平时小贞比较注意孩子饮食,很少在家里放零食,冰淇淋也不让吃,我经常带着她出去开小灶。下午三点左右上完舞蹈课我就陪她去喝下午茶,带她吃爱吃的薯条,爱喝的饮料。每次她都美滋滋的跟我说:“爸爸这是我们俩的小秘密哦。”

阳阳也是我们童装的小模特,拍画册她都是表现最好的那个,动作表情也自然,总是拍的最快的。结束后她都会给她算工资,那时候她就最开心。总是问我:“爸爸,什么时候再拍画册呀,赚钱还真辛苦呀,等我攒多一点要给妈妈买漂亮衣服的。”

我以前时常想阳阳长大后婷婷玉立的样子,一定是善良美丽,开朗幽默,落落大方。以前每次想到阳阳长大会离开我的怀抱,跟她的男朋友步入婚礼殿堂我就强制自己不再往下想。那时候我还幻想过在什么样的场景下什么样的心境把阳阳的手搭在她未来老公的手上。

阳阳,爸爸的心都要疼死了。爸爸不忍心也开不了口祝你生日快乐。你已经不在了。你带给了爸爸太多太多的快乐太多太多的幸福,可是还不够,再多都不够。再多都不够。

我的阳阳生于2009年10月22日,还未满八周岁。那天我没有祝她生日快乐。阳阳,生祭。祝爸爸坚强吧。

11月28日:

一直想让自己坚强,今天我真的没办法再坚强下去。一直以来的克制隐忍,今天我真的我崩溃了,我无法再欺骗我自己,你们真的离开我了。

柽一,你是爸爸妈妈心中的男子汉。一直帮忙爸爸妈妈照顾弟弟妹妹,你一直是爸爸的骄傲,爸爸很想很想你。

阳阳,你是爸爸上辈子的小情人。爸爸前天梦到你了,你微笑的用英语和朋友们介绍了自己。你长高了很多,爸爸都抱不动了,你知道的,爸爸最宠爱的是你。

潼潼,你陪爸爸的时间最短。爸爸很想很想多陪陪你。你很聪明,很懂事,你要听妈妈哥哥姐姐的话。大家都很宠爱你

小贞,还有很长很长的路我们没有走完,太多太多的诺言我们没有兑现,约好白发苍苍,一起到老,可惜你不能陪我一起走下去了。

我们相处了十二年,一个轮回。我相信,下一个轮回,我们还会再遇见。我给你和孩子手背上都做了记号,遇见的时候,我会认得你和孩子,你们也记得我。我们还是一家人,永永远远的一家人。

希望正义得到伸张。


2021年07月13日更新:

4 年之后,林生斌的人设竟然崩塌,他在微博上卖惨营销的苦情男形象,或是代笔。以消费亡妻卖惨进行营销,诈捐,从中获利千万。并且有纵火案事发前就已经出轨的嫌疑。

读者请自行判断。

 

tmux外貌篇:让你的tmux更好看

今天发现tmux的status竟然可以展示CPU的负载,然后查了一下tmux手册,发现tmux还有这么多好玩的东西我从来都没接触过。这篇文章讲一下tmux的options(由于是外貌篇,所以会重点讲有关外观的部分)。本文“授之以渔”,会告诉你怎么设置,而不是提供一个conf。

我的tmux外貌

本文所有命令皆为tmux命令,需要加上“tmux”前缀来运行。例如提到set-option,运行命令应该是tmux set-option,或者在命令模式运行(按下prefix+:

Options可以控制tmux的行为和外观,tmux的options分为Sever options, Session options, Window options三种。设置option的命令可以说不少(很乱),比如设置Window option就可以用 setw, set -w, set-window-option。作为一个Python程序员,简直不能忍受。建议只使用最后一种风格,因为“解决问题最直接的方法应该有一种,最好只有一种”,最后一种风格简洁明了,写到.tmux.conf文件中的话,即使没怎么用过tmux的人也可以看明白。况且这些命令很少被直接执行,一般是写在conf文件中的。

  • set-option -s 设置sever option
  • set-option 设置session option
  • set-window-option 设置window option
  • set-option -g 设置全局option

tmux的外貌主要提现在status bar上,这里可以配置你想在status bar看到的东西,以及格式等。status bar主要有5个东西组成:

  1. window 列表
  2. 左侧显示区
  3. 右侧显示区 (1-3其实根据配置决定,比如右侧也可以不显示)
  4. message显示条(显示message的时候,会占据整个status bar)
  5. command输入的时候(这时也会占据整个status bar)

Message Style

上面这些东西显示的样式都可以通过style来指定。style是由逗号分割的一个list组成。fg设置前景style,bg设置背景style。

颜色可以使用三种方式来指定:

  1. black, red, green, yellow, blue, magenta, cyan, white
  2. 从colour0到colour255之间(注意不要打成color),查看所有的颜色
  3. 用css风格的那种 “#ffffff”

除了颜色之外还支持以下属性(前面加上no表示关掉,比如noblink):

  1. bright(blob)
  2. dim
  3. underscore
  4. blink
  5. reverse
  6. hidden
  7. italics
  8. strikethrough

举个例子,下面的命令:

将会把命令模式的style设置为(其实是有闪烁效果的):

另外一般中间的status显示的是window的list,所以window的style也有必要设置。需要设置的style有以下几种:

  • widnow-status-style window默认的style
  • window-status-current-style 当前window的style
  • window-status-bell-style 有bell的window的style

tmux的bell就是如果窗口有活动,窗口就会变成bell的style,来提醒你这个窗口有进程活动已经结束了。打开bell还需要下面的设置:

除此之外,上面的三个属性还可以设置format(但是我觉得用default的format就可以),默认的格式是#I:#W#F,其中I是窗口序号,W是窗口名字,F是窗口标志(例如当前窗口标志是*,最后打开的窗口标志是-,Zoom的窗口标志是Z)最后我的窗口样式如下。

Status Style

对于status(左侧status,右侧status,中间),可以使用FORMAT来指定。FORMAT是一个字符串,可以指定显示样式。其中#{}包裹的部分会被替换。比如set status-left "#{session_name}"将在左侧状态栏显示目前session的名字。支持alias缩写,这条命令也可以写成set status-left "#S"。所有可用的变量见这里

除了可以使用tmux的内部变量之外,还可以使用shell命令结果,#()会解释成shell命令,例如set status-left "#(uptime)"将在左侧状态栏显示uptime命令的输出。tmux并不在执行括号内的命令的时候阻塞住。而是会展示最近一次的执行结果。刷新频率由status-interval来控制。

上面介绍的style也可以使用,方法是将style描述#[]中,会控制之后的FORMAT或者shell命令的格式。

举例,下面的这样设置将status-right的显示修改为如下:

我的.tmux.conf: https://github.com/laixintao/myrc

最后推荐一些tmux插件(外貌向):

  1. tmux插件管理:https://github.com/tmux-plugins/tpm (Plugin集合
  2. 显示cpu load的:https://github.com/thewtex/tmux-mem-cpu-load
 

Python老鸟想告诉新手的事情

最近reddit有个热帖:Senior Python Programmers, what tricks do you want to impart to us young guns? 很多python老鸟分享了自己的奇巧淫技(也不算特别淫),让我学到不少经验和技巧,觉得有必要整理一下。


尽量使用Python3.6,相比Python2.7,Python3.6有了很多提升,比如enums和fstring(实话说,就算只为了fstring我也要换到3.6)。

无比赞同,最近俺们公司的项目也都换到Python3.6了,俺之前写了个git-ext小工具,也随手升级到Python3.6了。

使用.open()和.close()的代码是“有味道”的,尽量使用with代码块(俺写的with文章)。

关于什么是“有味道的代码”,下面有人给出了回复:

有味道的代码指的是,当你去看这块代码的时候,看不出有什么错,但其实是有bug的……简单说就是欠优化的代码。wiki

每一个项目都使用virtualenv,不要在系统的Python上安装任何东西。这样可以保持产品环境独立、可复制。不使用virtualenv就像生活在垃圾场一样。

推荐pipsi,让每一个python工具使用一个独立的env,推荐virtualenv wapper,创建、使用、删除virtualenv从未如此简单。当然下面也有网友推荐了pipenv

使用csv模块来处理CSV文件…… 网友调侃此条说:就是有人喜欢手工处理CSV,“CSV而已,我用逗号分割就好了”成了他们最后的遗言。

不要嵌套生成器表达式,不然代码难以阅读(此条来自Google style guide)。

我觉得嵌套两层尚可。

如果你在循环的时候需要下标,使用enumerate(items)。

如果你用IDE编程,花点时间去学习它的features,特别是如何使用debugger,如何设置断点。

同意,Vim还是IDE,并不重要,重要的是去掌控你的武器。

multiprocessing,而不是threading。

不同意这点,要看情况,反对任何形式的教条主义。俺最近在翻译一本Python并行编程书,大家可以去看看。

用REPL开发特别方便,比如iPython和Jupyter。优点是可以方便地跳转和编辑运行,还有很多魔术方法。如果你经常用REPL的话,还可以试试ptpython和bpython。

理解解包,比如多重赋值: first, second, *_ = (1,2,3,4)。

避免使用 *args和**kwargs,这会让代码更难读,也会让代码自动补全无法工作。除非你确信自己需要这么做。下面有网友支持,即使你需要这样使用,也并不一定使用这两个名字。比如sum(*numbers)就比sum(*args)要好很多,虽然标准库里面用的*args。

这里提一下,Python3已经支持”keyword-only” argument了,如下:

def compare(a, b, *, case_insensitive=False, locale_aware=False)

在所有写代码的地方使用lint工具,例如pyflakes或pylint。它们会强迫你成为更好的程序员。

其实这一条争议比较大,有一规则个人认为比较死板,比如testcase的函数名应该尽量长并且表达出你要测试什么,因为这些test函数永远不会被程序员调用所以长一点也无所谓。另外80个字符也是比较烦。一开始用是好的,但是用了很长时间还需要lint来规范你就不太好了。手中无刀,心中有刀。(Vim用户推荐一下neomake,异步不阻塞)

当你有什么需求的时候,先check一下标准库有没有你想要的东西,如果没找到……再找一遍。还是没找到的话,就去第三方库找一找(有时候github的搜索框比Google还好用)。Python有比较好的生态,大多数痛点都已经有人做了。

itertools和fuctools是你的好朋友,两个模块对一些常见的问题提供了实用的工具。总之,你对标准库越熟悉,你处理问题的方法就会越清晰、越pythonic。

Understand the decorator. Become the decorator.

好吧这句话无法翻译出来意境,之前写过这篇文章,对理解装饰器帮助很大,可以参考一下。

不要称你自己是个Python程序员,不然如果换了一种语言,你就什么也不是了。称自己为“系统工程师”或“Python开发者”或“自动化专家”。

之前我总是不断打开命令行,载入自己写的模块,测试程序。后来我改变了开发模式,先写一个小的单元测试,然后以后开发只通过运行这个测试来调试。即使这个测试并没有真正assert,只有简单的打印。(欢迎加入TDD)

学习单元测试。当你发现你的代码太长,目的不明确的时候,就需要重构了。写出可测试的、清晰的代码。函数应该有明确的目的,入口和返回值。

经常重构代码。这是你让已经工作的代码变得更好的机会。

变量名字使用单词。Good:counter, probe, product; Bad: c, cnt, prb, prdct, obj

理解生成器。尽可能用它。

并不是所有的东西都必须是class。https://www.youtube.com/watch?v=o9pEzgHorH0

尽可能使用absolute import。

理解Python的线程,GIL和multiprocessing

熟悉asyncio。

永远不要用list(任何可变对象都不要用)作为参数默认值。 (foo=[])

It’s not about how complicated you can make it, but how simple you can make it.

That software development isn’t about tricks. It is about process, communication, and application of best practices.

import this. (Python的哲学

不要重复!如果同样的代码写了两次,就说明有更pythonic的方式,比如:

可以写成:

多调研,少写代码。

永远不要假设“问题出在哪”,要确定。

写小的函数。给每个函数一个docstring,确保代码的可读性。

Don’t use pygame, it’ll only break your heart.

阅读:https://docs.quantifiedcode.com/python-anti-patterns/

 

Vim使用相对行号进行一切操作

使用Vim的一点好处就是,可定制性非常高,如果遇到任何让自己感到不适的痛点,都可以通过配置甚至开发一款插件来解决。开始使用Vim一段时间之后,我发现一个非常“反人类”的地方:Vim的很多命令都是需要查行数的。比如“删除一个函数体”,你就要数数这个函数占了几行(比如5行),然后按5dd。如果是使用鼠标的话就不用数了,可以直接拖过去,但是鼠标效率太低,既然学了Vim就不要让手离开键盘了。我总结了一套方案,几乎所有的操作都可以不用数数来完成。

Vim支持两种行号,相对行号和绝对行号。相对行号是显示每一行距离光标所在行相隔多少行,绝对行号就是顺序显示每一行的序号。

set nu打开行号显示, set rnu打开相对行号显示(更多信息可以查看:help nu 和 :help rnu。效果如下:

打开行号显示

打开相对行号的显示

同时打开相对行号和绝对行号

可以看到,如果同时打开二者,就会在当前行显示绝对行号,其他显示距离当前行的距离。

使用一段时间我发现,在normal模式时,经常进行对多行的操作,这时候如果使用绝对行号,那么必然是要做减法,或者去数数来确定行的数量的。所以在normal模式应该使用相对行号。0对我们来说是没有任何作用的,所以当前行还是显示行号吧。然后一些常用的操作习惯都要相应换一下:

  • 删除n行。3dd是删除包括当前行一共3行,但是因为显示的是相对行号,我们要“删除直到目标行”的时候,要不自觉的+1,比如在上面最后一幅图,要删除直到“终端配色安装”的内容,就要按4dd。有没有办法不用计算,所见即所得呢?有的,d3j即可。command+直到目标行号+方向。例如删除直到上面“我对……”的内容,就是d4k
  • 其余的操作也是类似,例如移动到下面4行,可以用4gg,也可以用g4j。其他还有yank操作等。
  • 替换范围本来是使用绝对行号就可以,例如替换10-20行,就是:10,20s/xxx/yyy/g,但是由于我们normal模式显示了相对行号,那么就要根据相对行号操作了: :.+2,.+12s/xxx/yyy/g (假设当前在第8行)。.在Vim中表示当前行,要善于利用。由于我们显示的是相对行号,所以基本上和行号有关的操作都需要计算完成,用.加上/减去显示的相对行号(所见即所得)

在insert模式时,我们一般都是编辑操作,不会对多行进行判断,此时可能对绝对行号更关心(写到多少行了等)。所以可以监听一下事件,进入编辑模式时使用绝对行号,退出编辑模式进入normal模式时使用相对行号。设置如下:

set nu是因为我一般打开一个文件不一定是编辑目的,浏览的话绝对行号更方便。这样设置可以让第一次进入文件的时候使用绝对行号,进入编辑模式再退出到normal模式时再显示相对行号。

这样用了一段时间,感觉按下的键多了,但是脑子里需要的计算少了很多,还不容易出错,挺好的。

最后附上我的.vimrc,供参考使用,不推荐盲目复制。