做多基尼系数,过去5年成功的生意经

最近突然从一个朋友那里听到了这样一个评论:过去5年成功的企业,都做多了基尼系数。

 

虽然我们不知道他们是否在创业伊始就“看多”基尼系数,但是从结果看,他们显然做多了基尼系数。

 

简单说就是很多企业的成功来自于做多贫富差距。

 

做多基尼系数,过去5年成功的生意经
“做多”,并不仅限于投资时看好一只股票,然后买入这种行为。
广义做多指的是当下看好一件事情的发生,并按照这件事情导致的机会做生意、做投资、做个人发展。

 

先说说客观情况,我们的基尼系数从2015年开始,确实掉头向上了。

做多基尼系数,过去5年成功的生意经


从各类新闻中你们也能感受到这样的趋势。

 

一方面,我们目前仍然有6亿人月收入不到1000元;另一方面,著名的招商银行私人财富报告也告诉我们,可投资资产超过1000万的人群,他们占有的可投资资产总规模,2006年只占到全部样本可投资资产比例的20%,2018年变成了32%。

 

统计局给出来的“五等份分组的人均可支配收入”,也验证了这个趋势。

 

  • 城镇居民:

  2013
2019
20%低收入组家庭人均可支配收入 9895.9元
15549.4元
20%高收入组家庭人均可支配收入 57762.1元 91682.6元
  • 农村居民:

 

  2013
2019
20%低收入组家庭人均可支配收入 2877.9元
4262.6元
20%高收入组家庭人均可支配收入 21323.7元 36049.4元

 

 

 

财富是在两极分化的。

 

做多基尼系数,过去5年成功的生意经

最简单的做多基尼系数的办法,就是东西往两头卖。

 

M型,如果两边越来越大,要么就是便宜货、要么就是奢侈品,都可以成功。

 

奢侈品火爆:

做多基尼系数,过去5年成功的生意经

 

上周去SKP逛街,和购物中心行业尚未恢复原状比,逛奢侈品的人还真是多。

 

今年疫情期间,LV和香奈儿涨价之后,丝毫没有影响消费。

 

做多基尼系数,过去5年成功的生意经

 

另外一端:

 

单个用户到现在年消费额还不到2000的拼多多,用户增长趋势显著超越了主打品牌和生活品质的天猫。

做多基尼系数,过去5年成功的生意经

 

理论上说,目前的社区团购依然在按照做多基尼系数的方向在做。

 

从消费者角度说,等一天、团购、在少量低价SKU中寻机会出手,是典型的价格敏感性消费行为。

 

做多基尼系数,过去5年成功的生意经

但是做多基尼系数,并不是做奢侈品、做低价商品这么简单。

 

过去这几年做多基尼系数还有一个方向:为高收入者提供“用钱换时间”的解决方案。

 

最直观的就是外卖。

 

我知道很多网友会质疑我——难道不是社畜才外卖么?难道不是因为懒才外卖么?

 

这就是真实的中国社会。

 

虽然大家在网上声讨996,但是残酷的现实告诉我们,能够高频率使用外卖的人,其实是收入相对比较高的人群。

 

 

你仔细想想,只有时间成本高于外卖快递员的时间成本,才能让一个消费者持续高频购买外卖。外卖员的时薪是10几块钱,只有你的时间成本高于这个价格,才会长期持续点外卖。

 

否则,你就自己下楼了;消费者是有理智的,点买卖花掉的快递费,偶尔懒一次可以,懒好几年都是长期思考过后的结果。

做多基尼系数,过去5年成功的生意经

我更详细地说一说。

 

外卖员作为一个纯粹的体力劳动,其工资水平和社会平均收入水平有强关联。

 

这个好理解,如果做其他工作比外卖员高,那外卖员肯定去做其他工作。正因为外卖收入更高,让他们能够成为全职外卖员。

 

也就是说外卖员这个工作的收入属于相对稳定的参照系,如果你的收入高于这个参照系,你才可以高频地购买外卖。

 

虽然你是社畜,虽然你懒,但是你的收入在全社会的各类工作中——都是靠上的。

 

这从美团外卖的数据中也能读出来,其核心客户3000万,和中国的总人口相比,就是很少的那部分高收入人群。

 

外卖的成功,就是在赌高收入这部分人群会持续增长,收入水平会持续增加。

 

所以,这种给高收入人群——用钱买时间选择的生意,过去5年都成功了。

 

生鲜市场我经常聊,从这个角度上说,生鲜电商就是典型的用钱换时间的商业模式。

 

有的朋友经常把每日优鲜、叮咚买菜和社区团购的老几位对比。

 

目前看他们卖的东西都是生鲜,但是一个做M型左侧,一个做M型右侧,是很不一样的商业模式。

 

在做多“基尼系数”这件事情上,两类生意都是做多同一件事。

 

做多基尼系数,过去5年成功的生意经
你们也知道,我写文章一般会绕好几个弯。
做多基尼系数的成功者显然还有第三波人。
 
M型消费市场,在基尼系数增加的大环境下中间层其实在坍塌,但是有一类商业模式恰恰做的就是中间层。
 
“消费升级”没错,但是过去这几年所谓的消费升级:
 
  • 十几块钱的雪糕;

  • 30多的奶茶;

  • 200多的蛋糕;

  • 比常规薯片贵50%的薯片;

  • 比可口可乐贵一倍的汽水。

 

就看绝对价格,你并不觉得这些新的消费品牌不可承受。
 
能够承受就对了。
 
M型社会的一个重要特征就是中间层的消费者,明明上不去了,向左移动困难。但是仍然需要在“精神上”满足左侧的生活需求。
 

做多基尼系数,过去5年成功的生意经

我说人话、我说人话。
明明其实没有办法成为真正的“高净值”、“高收入”,但是中间收入人群需要某种消费品来证明——自己其实生活的像高净值那样“精致”。
 
比如30多块钱的奶茶,绝对价值上看确实比不上几百块钱一顿的大餐或者上千块钱的手机。
 
但是从满足:解渴、消费咖啡因的角度上看,确实溢价有点高。
 
这类在某个低单价的领域里,做高端品的消费品牌,本质上满足了M层中段消费者,故作生活精致的心理需求。
 
这种商业模式,为什么在不同线城市给到不同的价位?
 
本质上就是因为在各个城市,他们需要准确命中中段平均消费水平,满足这类客群消费需求。
 
比如在3线城市,这类奶茶20块左右;在一线城市,这类奶茶30多块。
 
说他们不是真正的顶级消费,你可以对比一下iphone手机、梵克雅宝——什么时候你听说过他们按照城市等级定价的?
 
做多基尼系数,过去5年成功的生意经
说了这么多,过去这5年成功的商业模式,都在做多基尼系数。
 
  • 有人粗暴地做多奢侈品和低价商品;

  • 有人给有钱人提供解决方案;

  • 有人稍微动了脑子——M型的中间层也需要呵护。

 

如果认为未来基尼系数还会保持高位,上面提到的这三类,就仍然是生意和投资机会,甚至年轻人找工作也可以从这类公司下手。
 
但是从我个人来说,基尼系数提升,意味着社会的总成本也会不可避免的提升,带来很多负外部性影响。
 
  • 奢侈品对就业贡献实在太小,只做低价品中国的产业升级又要延后;

  • 长期使用外卖的人越来越多,意味着普通劳动者的收入提升速度太慢;

  • M型中间层沉溺于一杯奶茶、一个蛋糕,总有一天会意识到这不过是幻觉。

从我个人对社会的期待来说,但愿这些公司所押宝的贫富差距扩大——是错的。

 

转自:https://mp.weixin.qq.com/s/fKbpWjDv0jwLBZgZ3Bz3gg

2020上海各区考入「四校八大」难度排行!最大分差31分!

2020年上海中考零志愿分数线一公布之后,大家讨论最热烈的就是:今年宝山区是福地啊,上中的分数线只有583分!现在看来,仍是觉得低得离谱,从平行志愿分数线上看,在徐汇区583分上不了市二中学(585.5)。
今天,升学君就跟大家再来回顾一下2020年中考零志愿分数线,重点以「四校八大」作为参考分析,来看看各区通过零志愿考入「四校八大」的难度如何。
2020年四校八大零志愿分数线
2020上海各区考入「四校八大」难度排行!最大分差31分!
(点击图片放大查看)
平均零志愿录取分数线上来看,各区考入「四校八大」的难度排行:徐汇>黄浦>杨浦>松江>闵行>奉贤>长宁>静安>虹口>嘉定>普陀>金山>青浦>浦东>崇明>宝山

 

2020上海各区考入「四校八大」难度排行!最大分差31分!
简单分析如下:
1、宝山区的“幸福指数”最高!不仅四校八大的平均录取分数线排在倒数第一,而且四校八大共12所学校,有6所学校的零志愿分数线在宝山区是最低的,四校均是16区最低。
2、徐汇区“痛苦指数”最高!徐汇,杨浦两区的录取均分高居16区前三,达到598分以上。而且,两区的四校八大零志愿分数线,均有3所录取分是16区最高(有并列)。
3、人口两大区,闵行浦东差距较大!四校八大在闵行的录取均分达到598以上,排在16区的第5位,属于较难区;浦东的话,录取均分则是592分,排在倒数第3位,算是比较幸福的。
正所谓:没有对比就没有伤害。升学君还整理对比了四校八大在16区零志愿的最高分数线和最低分数线。
2020上海各区考入「四校八大」难度排行!最大分差31分!
可以发现:四校八大在16区的零志愿分数线,不仅最大分差达到惊人的31分,最小分差也有6.5分。绝大多数学校的高低落差,都在10分以上
温馨提示:2021年中考还有零志愿招生,以上分析供大家参考~

转自:https://mp.weixin.qq.com/s/2-fUJQeFV7Q1VS_4e78G_A

白天团建,晚上大保健,奇葩团建招人恨。

 

【黑话连篇】

 

该栏目更多的是揭露事件或对事件的看法,以达到让人精神升华的目的。

 


 

对于打工人而言,比碰到苛刻老板更让人头疼的是,碰到一个热爱团建的老板。尤其是那种把团建写KPI,强行团建还得员工自个掏腰包,否则就扣工资的那种。
 
这世上再没有比这更恶心的做法了吧 。
 
 
强制团建与酒桌文化
 
在我极为有限的职业生涯里,我经历了数次团建的摧残,以至于现在一听到团建这个词,就会浑身一哆嗦。
 
一般来讲,老板的性格类型决定了团建的属性。
 
如果领导是那种外放型性格,平常动不动就开会训话,那团建基本上就是一次免费加班,外加听老板指点江山。
 
正规的公司如果要团建,HR会提前发通知:周六或周天团建,没有特殊情况不允许请假,云云。
 
白天团建,晚上大保健,奇葩团建招人恨。
 
要是这场团建是老板临时兴起,那就灾难了。
 
离下班还有半小时的时候,部门领导突然满面春风过来和大家宣布,等会下班先别走,老板要请吃饭、唱歌、搞通宵。不许走,一个都不许走。
 
于是一脸懵逼的你带着满腔的敢怒不敢言颤颤巍巍的上了饭桌,酒过三巡,老板开始高谈论阔,小刘你这个月的工作状态不对;小李你最近怎么回事,业绩居然还没上个月高。
 
每个老板都自以为深谙用人之道,通常在进行一系列的点名批评之后,会用画大饼的方式给员工加油打气,畅想未来。
 
此时领导带头鼓掌,员工轮番敬酒,为了展示自己的气量,领导又开始挨个回敬员工。
 
你来我往,人人都沉浸在这热闹的酒桌文化里,要是碰上不会喝酒的女同事,大家伙还得挨个劝一劝:
 
领导敬酒不喝不行,不喝就是不给面子;又或者是,这就是啤酒/红酒/洋酒/白酒,喝一点对皮肤好;出来混哪能不喝酒;喝完这一杯还有三杯等等。
 
假如你以生病为借口拒酒,只要你吃的不是头孢,百分百推不掉。现在一些老板已经知道头孢拒酒的招数,除非当场吃一颗,否则当不得真。
 
作为职场新人的你,不会喝酒只能闷头上,心怀不满也只能咬咬牙。本来和朋友约好九点峡谷见,最后只能无奈回句:改天一定,老板傻逼。
 
白天团建,晚上大保健,奇葩团建招人恨。
 
当老板终于酒足饭饱,大家又得匆忙转场,风风火火赶往大都会休闲会所-KTV,并给老板先点上一首贵妃醉酒暖个场。
 
在老板那自信且难听的歌声里,此次团建终于达到高潮,之后摇色子的摇色子的,喝酒的喝酒,啥都不干的必须来一首以表达对老板的敬意。
 
在K歌结束的前几分钟,大家一定要高举酒瓶,庆祝今天的辉煌,祝福明天的曙光。
 
要是当晚老板还有其他安排,幸运的你大概能在11点前回家。要是碰巧赶上周五,没有12点绝对散不了场。万一老板老当益壮,突发奇想要熬个通宵,你也只能干瞪眼陪着。
      白天团建,晚上大保健,奇葩团建招人恨。
图片来自网络       
什么女孩子一个人回家不安全想提前走这种理由是行不通的,因为领导一定会让你打车回家的,自费。实在不行就玩通宵嘛,绝对安全。
 
这是每个人职场生涯都可能遇见的一场常规团建,打工人的社交噩梦,老板的快乐weekend。
 
说句不好听的,这种团建的意义就是让领导享受花钱找乐子的感觉。只要花点小钱,就能让员工疯狂拍马屁、免费陪吃陪玩陪喝酒。
 
乐哉乐哉。
 
 
狼性文化,沙雕游戏
 
要是碰上那种崇尚狼性文化的老板,那团建绝对是对身体和精神的双重摧残。
 
白天团建,晚上大保健,奇葩团建招人恨。
 
这种事我也经历过,在我大学毕业的那一年。不过我稍微好一点,没遇上这种互扇耳光的戏码。
 
只不过是让我重新体验了一次军训而已。
 
那是一个晴朗的周末,年幼无知的我连同一大群刚毕业的小伙伴们,被拉到远离市区几十公里的一个训练场,进行了一次为期两天的团建。
 
在这里,我第一次体验到什么叫做社会险恶。
 
由于是周末,出行的人非常多,原本预计两小时的车程,一直开了近4个小时才到目的地。中途经过一大片果园,大家下车吃了个中饭。
 
在果园溜达的时候,我想着环境还不错,空气挺清新,同事也很和气,这应该是趟不错的旅行。
 
好不容易到达目的地,大家放下包就开始集合站军姿了。
 
在一身困意和懵逼的情绪中,我们的团建正式开始。这种团建拓展说是为了拉近团队之间的关系,增强凝聚力,其实就是在不断的消耗员工对于公司的信任。
 
白天团建,晚上大保健,奇葩团建招人恨。
 
什么让恐高的人走高空独木桥、攀岩之类的就不说了,常规操作。
 
讲真,团建搞高空项目的时候,还是尽量男男、女女搭配比较好,起码不会出现因生理差异而产生的尴尬场景。
 
想当初攀岩的时候,排我前面的女生穿了套十分紧身且单薄的运动装,在安全绳的捆绑之下,被吊在半空中的她像极了一块摇摇欲坠的五花肉,被勒紧的每块肉都在风中颤抖。
 
而底下排着一溜瞪大眼的无辜男同事,社会性死亡现场啊,有没有。
 
白天团建,晚上大保健,奇葩团建招人恨。
 
除了这种考验定力的活动,还有一些毫无意义的沙雕运动会,比如两人三足、一人一根筷子合作夹绿豆等。
 
最让人无语的当属人墙,这个极尽侮辱智商的游戏,作为公司的门面兼体力当担,我毫无疑问的沦为了那堵被人践踏的墙。
      白天团建,晚上大保健,奇葩团建招人恨。
当五光十色的鞋底踩上我洁白的T恤,我哭了。为了这份工作,我承受了太多,女生踩一下就算了,快两百斤的男同事也要踩我,不出意外,第二天肩膀肿的老高。
 
不知情的酒店服务员小姐姐还来问我是不是偷偷在T恤里塞垫肩了。
 
最让人迷惑的是当大家千辛万苦爬上了那堵铁墙,过一会又要排排站以背摔的形式下来。
 
白天团建,晚上大保健,奇葩团建招人恨。
 
领导说这是为了增强大家的体质,我就纳闷了,是我的麒麟臂和翘臀不够突出吗?
 
等到训练结束,早已日落西山。抠门的训练场也不开灯,于是在一片黑暗之中,催泪的BGM响起,在这种氛围之下,大家如同晚归的母鸡,开始一声接一声的啜泣,流着泪说队友可亲、团队可信、未来可期。
 
大家手牵着手围成圈,感性的直接哭成泪人,含蓄的眼泛泪花,为了不使自己突兀,我低下了我猛男的头颅,伪装伤心,以掩饰我不经意上扬的嘴角。
 
此时我正拉着全公司最漂亮妹子的小手。
 
要不是因为这,我早走了。
 
 
我为什么反感团建
 
我经历过的团建不止这几个,还有什么强制性自费聚餐、包场看电影在影院门口拉横幅喊口号,回公司还得写小作文等等。
 
只要自己不觉得尴尬,尴尬的就是路人。这题我终于学会了。
 
不过我这都算正常的,网上的奇葩团建才真是让我开了眼界。
 
什么没完成销售业绩,组团在街头裸奔;团建现场女员工排队和领导亲嘴???
      白天团建,晚上大保健,奇葩团建招人恨。
当我看到这个新闻的时候,心里一万句草泥马奔腾而过。
 
怪不得人人都想当领导,合着还有这等齐人之福呢?
 
还有一些更加恶臭的公司,所谓团建活动更是极尽性挑逗之能。比如把气球放在女性臀部,之后合力挤破气球;比如在女性胸口放鸡蛋,让男性用嘴传递。
 
还美其名曰,增强团队合作意识。
      白天团建,晚上大保健,奇葩团建招人恨。白天团建,晚上大保健,奇葩团建招人恨。
真是越看越恶心,这TM就一精虫上脑的LSP行为。
 
有需求就自己解决,想看春宫图自己找资源,让员工现场表演,是准备以后改行从业吗?
 
以团建之名满足自己猥琐下流的欲望,真踏马恶心到家了。
 
其他的诸如互扇耳光、业绩不达标喝马桶水、让员工在大街爬行等奇葩团建活动更是时有爆出。

 

白天团建,晚上大保健,奇葩团建招人恨。
 
除了涉嫌性骚扰和侮辱智商,一些公司所谓的团建还会要人命。
 
11月20号四川泸州某公司在一个农场进行水上拓展训练时发生意外,最终导致3人死亡,1人受伤。
 
就领点工资上个班,结果连命都搭进去了。
 
这就是所谓的团建,所谓的增强团队凝聚力吗?这就是职场PUA行为,以职权打压、控制下属,以满足领导某种见不得光的欲望,不是吗?
 
要我说,所有不以吃喝玩乐为目的的团建,都是流氓行为。团建本身的意义的确是为了增强同事关系,加深相互了解,但这绝不是建立在搞黄色和谋杀的基础上。
 
现如今的团建,正常的还真少。绝大部分人参加的团建,只不过是换了个场地加班而已。不仅要周六日无偿加班,你还得对公司感恩戴德,否则就是不知好歹。
 
这种形式大于意义的团建,其实就是一场作秀,强行占用员工休息时间。等到下次招聘的时候,HR可以大方地告诉求职者,我们公司福利非常好,有定期团建,去XX沙滩 拉练、XX湿地 跑马拉松 哦。
 
白天团建,晚上大保健,奇葩团建招人恨。
 
一般我们说求职季有金三银四、金九银十的黄金期,因为每年毕业季和过年前后都会有大量人员离职。除了这几个月,还有一个离职的高峰期,通常都发生在团建之后。
 
如果一家公司突然出现多人离职,一般不是要倒闭了,就是刚团建了。
 
想要逼走员工的方式有很多种,团建是最好的方法,覆盖面积广、杀伤力大,并且成本低。你只要和员工说自费团建,四天五夜。
 
除了压榨员工,这个社会上当然也存在善待自己、善待员工的团建活动,
 
比如2019年江苏某公司领导就曾组织一次内容极为丰富的团建活动,大家的行程是这样的:
 
白天辛苦团建,晚上努力大保健。
 
白天团建,晚上大保健,奇葩团建招人恨。
 
像这样的领导,emmmm,可遇不可求。
 
离职,成为年轻人对抗非人团建的唯一方法。工作固然重要,但是和尊严、性命相比,团建算个p。
 
团建活动是一家公司企业文化和价值观的最直观体现,这种以伤害员工尊严和健康的团建真的low。
 
要是大家不幸碰上了这种公司,赶紧溜吧。
 
不值得,真的不值得。
 

 

白天团建,晚上大保健,奇葩团建招人恨。

 

转自:https://mp.weixin.qq.com/s/PIv18LskgRKXNqt2chPbQg

求你了,别再用 print 调试代码了

对于每个程序开发者来说,调试几乎是必备技能。

代码写到一半卡住了,不知道这个函数执行完的返回结果是怎样的?调试一下看看

代码运行到一半报错了,什么情况?怎么跟预期的不一样?调试一下看看

调试的方法多种多样,不同的调试方法适合不同的场景和人群。

  • 如果你是刚接触编程的小萌新,对很多工具的使用还不是很熟练,那么 print 和 log 大法好

  • 如果你在本地(Win或者Mac)电脑上开发,那么 IDE 的图形化界面调试无疑是最适合的;

  • 如果你在服务器上排查BUG,那么使用 PDB 进行无图形界面的调试应该是首选,详情请戳明哥之前的文章:让代码调试不再难 – pdb

  • 如果你要在本地进行开发,但是项目的进行需要依赖复杂的服务器环境,那么可以了解下 PyCharm 的远程调试,详情请戳明哥之前的文章:不能不会的远程调试技巧

除了以上,今天明哥再给你介绍一款非常好用的调试工具,它能在一些场景下,大幅度提高调试的效率, 那就是 PySnooper,它在 Github 上已经收到了 13k 的 star,获得大家的一致好评。

有了这个工具后,就算是小萌新也可以直接无门槛上手,从此与 print 说再见~

1. 快速安装

执行下面这些命令进行安装 PySnooper

$ python3 -m pip install pysnooper

#
 或者
$ conda install -c conda-forge pysnooper

#
 或者
$ yay -S python-pysnooper

2. 简单案例

下面这段代码,定义了一个 demo_func 的函数,在里面生成一个 profile 的字典变量,然后去更新它,最后返回。

代码本身没有什么实际意义,但是用来演示 PySnooper 已经足够。

import pysnooper

@pysnooper.snoop()
def demo_func():
    profile = {}
    profile["name"] = "写代码的明哥"
    profile["age"] = 27
    profile["gender"] = "male"

    return profile

def main():
    profile = demo_func()

main()

现在我使用终端命令行的方式来运行它

[root@iswbm ~]# python3 demo.py 
Source path:... demo.py
17:52:49.624943 call         4 def demo_func():
17:52:49.625124 line         5     profile = {}
New var:....... profile = {}
17:52:49.625156 line         6     profile["name"] = "写代码的明哥"
Modified var:.. profile = {'name': '写代码的明哥'}
17:52:49.625207 line         7     profile["age"] = 27
Modified var:.. profile = {'name': '写代码的明哥', 'age': 27}
17:52:49.625254 line         8     profile["gender"] = "male"
Modified var:.. profile = {'name': '写代码的明哥', 'age': 27, 'gender': 'male'}
17:52:49.625306 line        10     return profile
17:52:49.625344 return      10     return profile
Return value:.. {'name': '写代码的明哥', 'age': 27, 'gender': 'male'}
Elapsed time: 00:00:00.000486

可以看到 PySnooper 把函数运行的过程全部记录了下来,包括:

  • 代码的片段、行号等信息,以及每一行代码是何时调用的?

  • 函数内局部变量的值如何变化的?何时新增了变量,何时修改了变量。

  • 函数的返回值是什么?

  • 运行函数消耗了多少时间?

而作为开发者,要得到这些如此详细的调试信息,你需要做的非常简单,只要给你想要调试的函数上带上一顶帽子(装饰器) — @pysnooper.snoop() 即可。

3. 详细使用

2.1 重定向到日志文件

@pysnooper.snoop() 不加任何参数时,会默认将调试的信息输出到标准输出。

对于单次调试就能解决的 BUG ,这样没有什么问题,但是有一些 BUG 只有在特定的场景下才会出现,需要你把程序放在后面跑个一段时间才能复现。

这种情况下,你可以将调试信息重定向输出到某一日志文件中,方便追溯排查。

@pysnooper.snoop(output='/var/log/debug.log')
def demo_func():
...

2.2 跟踪非局部变量值

PySnooper 是以函数为单位进行调试的,它默认只会跟踪函数体内的局部变量,若想跟踪全局变量,可以给 pysnooper.snoop() 加上 watch 参数

out = {"foo""bar"}

@pysnooper.snoop(watch=('out["foo"]'))
def demo_func():
  ...

如此一来,PySnooper 会在 out["foo"] 值有变化时,也将其打印出来

求你了,别再用 print 调试代码了

watch 参数,接收一个可迭代对象(可以是list 或者 tuple),里面的元素为字符串表达式,什么意思呢?看下面例子就知道了

@pysnooper.snoop(watch=('out["foo"]', 'foo.bar', 'self.foo["bar"]'))
def demo_func():
...

和 watch 相对的,pysnooper.snoop() 还可以接收一个函数 watch_explode,表示除了这几个参数外的其他所有全局变量都监控。

@pysnooper.snoop(watch_explode=('foo', 'bar'))
def demo_func():
...

2.3 设置跟踪函数的深度

当你使用 PySnooper 调试某个函数时,若该函数中还调用了其他函数,PySnooper 是不会傻傻的跟踪进去的。

如果你想继续跟踪该函数中调用的其他函数,可以通过指定 depth 参数来设置跟踪深度(不指定的话默认为 1)。

@pysnooper.snoop(depth=2)
def demo_func():
 ...

2.4 设置调试日志的前缀

当你在使用 PySnooper 跟踪多个函数时,调试的日志会显得杂乱无章,不方便查看。

在这种情况下,PySnooper 提供了一个参数,方便你为不同的函数设置不同的标志,方便你在查看日志时进行区分。

@pysnooper.snoop(output="/var/log/debug.log", prefix="demo_func: ")
def demo_func():
    ...

效果如下

求你了,别再用 print 调试代码了

2.5 设置最大的输出长度

默认情况下,PySnooper 输出的变量和异常信息,如果超过 100 个字符,被会截断为 100 个字符。

当然你也可以通过指定参数 进行修改

@pysnooper.snoop(max_variable_length=200)
def demo_func():
    ...

您也可以使用max_variable_length=None它从不截断它们。

@pysnooper.snoop(max_variable_length=None)
def demo_func():
    ...

2.6 支持多线程调试模式

PySnooper 同样支持多线程的调试,通过设置参数 thread_info=True,它就会在日志中打印出是在哪个线程对变量进行的修改。

@pysnooper.snoop(thread_info=True)
def demo_func():
    ...

效果如下

求你了,别再用 print 调试代码了

2.7 自定义对象的格式输出

pysnooper.snoop() 函数有一个参数是 custom_repr,它接收一个元组对象。

在这个元组里,你可以指定特定类型的对象以特定格式进行输出。

这边我举个例子。

假如我要跟踪 person 这个 Person 类型的对象,由于它不是常规的 Python 基础类型,PySnooper 是无法正常输出它的信息的。

因此我在 pysnooper.snoop() 函数中设置了 custom_repr 参数,该参数的第一个元素为 Person,第二个元素为 print_persion_obj 函数。

PySnooper 在打印对象的调试信息时,会逐个判断它是否是 Person 类型的对象,若是,就将该对象传入 print_persion_obj 函数中,由该函数来决定如何显示这个对象的信息。

class Person:pass

def print_person_obj(obj):
    return f"<Person {obj.name} {obj.age} {obj.gender}>"

@pysnooper.snoop(custom_repr=(Person, print_person_obj))
def demo_func():
    ...

完整的代码如下

import pysnooper

class Person:pass


def print_person_obj(obj):
    return f"<Person {obj.name} {obj.age} {obj.gender}>"

@pysnooper.snoop(custom_repr=(Person, print_person_obj))
def demo_func():
    person = Person()
    person.name = "写代码的明哥"
    person.age = 27
    person.gender = "male"

    return person

def main():
    profile = demo_func()

main()

运行一下,观察一下效果。

求你了,别再用 print 调试代码了

如果你要自定义格式输出的有很多个类型,那么 custom_repr 参数的值可以这么写

@pysnooper.snoop(custom_repr=((Person, print_person_obj), (numpy.ndarray, print_ndarray)))
def demo_func():
    ...

还有一点我提醒一下,元组的第一个元素可以是类型(如类名Person 或者其他基础类型 list等),也可以是一个判断对象类型的函数。

也就是说,下面三种写法是等价的。

# 【第一种写法】
@pysnooper.snoop(custom_repr=(Person, print_persion_obj))
def demo_func():
    ...


# 【第二种写法】
def is_persion_obj(obj):
    return isinstance(obj, Person)

@pysnooper.snoop(custom_repr=(is_persion_obj, print_persion_obj))
def demo_func():
    ...


# 【第三种写法】
@pysnooper.snoop(custom_repr=(lambda obj: isinstance(obj, Person), print_persion_obj))
def demo_func():
    ...

以上就是明哥今天给大家介绍的一款调试神器(PySnooper) 的详细使用手册,是不是觉得还不错?

如果你还有其他关于调试的技巧,可以留言区分享出来,一起学习一下~

转自:https://mp.weixin.qq.com/s/ct-nC1rqYZi9i654hsRy5g

中考在即,浦东普娃要换区去黄浦吗?

 

一份好的数据分析报告,它一定会经历这几个过程:从一个强烈的好奇心开始,经过细致的数据收集和清理,做过透彻的数据挖掘,形成有严谨的逻辑链和有意思的故事线,匹配简洁明了的数据呈现方式,最后撰写通俗易懂的文字完成全文。

 

这样写出来的东西,才能打动人心。

 

今天这篇文章也是如此。

 

中考在即,浦东普娃要换区去黄浦吗?

题图和今天文章无关。如果你们来参加我的讲座,你们会听到关于它的讲解,这是一张很有深意的图。

 

初三的各位战士们最近正在为中考过程中的一个极其重要的节点作准备:一模考。

 

而父母们也开始琢磨技术层面可以做哪些事情,比如我最近遇到的这个问题:

 

中考在即,浦东普娃要换区去黄浦吗?
中考在即,浦东普娃要换区去黄浦吗?
中考在即,浦东普娃要换区去黄浦吗?
中考在即,浦东普娃要换区去黄浦吗?
中考在即,浦东普娃要换区去黄浦吗?

 

G大第一反应是冲洋泾的孩子去黄浦肯定不划算吧?那些伪市重点没意义,而黄浦两家八大甚至向明分数也不低。而果然有一个回复就是这样:

 

中考在即,浦东普娃要换区去黄浦吗?
中考在即,浦东普娃要换区去黄浦吗?
中考在即,浦东普娃要换区去黄浦吗?
中考在即,浦东普娃要换区去黄浦吗?
中考在即,浦东普娃要换区去黄浦吗?

 

中考目前父母唯一能做的技术性操作是落户到外区,然后中考选择户籍地考试。这在中考中完全允许,不受任何歧视,且和学籍高中同学一起参加中考,没有适应性问题。

 

唯一的障碍是不享受当下和外来的名额分配到校。这需要按照具体情况分析。我们这里假设这个孩子名额分配无望。(事实上到初三上半学期,是否能拿到本校的名额分配已经很明了,做决策时候会非常清楚是否要考虑这个因素。)

 

由于本区投放到本区的统招批名额一定是最多的,所以当我们说跨区时,真正有意义的是上述的选择户籍地考试。而不是零志愿或者未来的名额到区,那部分名额数量太少,太不稳定,你无法基于那个分数制定策略。

 

而G大做了定向数据分析,给出的策略如下:

中考在即,浦东普娃要换区去黄浦吗?

我们首先按照这位题主给的信息,标注出了孩子大概的正常水平,如上图灰色的横线所示。

 

我们先看进取的这边:上师、大同、上中东显然超出了孩子的范畴。剩下来的洋泾vs格致、川沙vs向明,明显黄浦在性价比上完胜。

 

我们再看防守这边:东昌+南汇vs敬业+大境的选择。东昌近些年一直保持着很高的性价比;大境2020年高考表现相当不错,因此性价比很突出;通常而言南汇、大境、敬业三校性价比接近,南汇略低。

 

我们再做一个假设:孩子万一考砸了,这四所学校都掉了,会怎么样?这个答案很明显:高桥中学是一所性价比非常高的学校,远非卢高和光明可比。

 

这是静态看问题。我们的分析还需要加上动态:以上为了对应2020年高考,我们使用了2017年中考分数。那么此后三年相关学校的中考分数演变又是怎么样的?

中考在即,浦东普娃要换区去黄浦吗?

可见从2017年以后,我们挑选的一一对应的高中里面,黄浦高中的分数开始翻转偏高,在2019年达到最大差值,而在2020年收窄到几乎一致。

 

所以如果把中考作为一个市场,那么其中的每一个个体都在充分使自己的利益最大化,并最终使得市场红利趋微。

 

然而每年却依然会有一些新的机会冒头出来。你不分析,不会知道。

 

好,讲到这里,你觉得题主该怎么选?

 

看我的答案之前,各位先自己想一想。

 

中考在即,浦东普娃要换区去黄浦吗?

仅以本图庆祝「赛博朋克2077」终于即将发售

 

这是我的答案:选黄浦户籍地考试,同时想办法勾搭下东昌的自招考。

 

能够争取一下洋泾的孩子,去黄浦读格致出路更好。向明对比川沙也是一样。

 

东昌今年第一年得到自招资格,面向全市招生,浦东学籍的娃有优势。以下是G大好友雨心(公众号:上海学区房观察)整理的东昌2020自招初中生源列表:

中考在即,浦东普娃要换区去黄浦吗?

可见基本是公办学校生源在自招东昌。从这位题主的字里行间我们可以判断她的孩子应该没有为传统强校自招考做过正式准备,所以类似东昌这样的学校相对自招和中考区别没有那么大的学校,可能有些机会。

 

上文所述,东昌的整体出路在向明以下的浦东+黄浦高中里面最好,如果能进他们的自招班,那么完全有可能获得和上一档高中同样的高考出路,甚至更好。

 

今天的文章是我第一次尝试微观层面的数据分析,和我此前写的宏观层面数据分析不同。

 

宏观层面的文章有其优势:和很多人都相关,没事也能看个热闹。但是宏观层面的文章很难帮助读者落到实际操作。无法回答So What

 

微观层面分析文章正好相反:我可以就某一个细节问题给出细致的分析,并且给出能执行的建议。但是阅读面会很窄。认真写文章结果阅读量小,真心挺难受的。

 

转自:https://mp.weixin.qq.com/s/_Xee43G5hEKrpicaGURBLA