女主播也太赚钱了!

前几天有个读者加我微信,说自己是个唱歌主播,现在想在小红书上做个人IP。

想问问我到底应该怎么做。

她直播已经干了两年,差不多赚了两百万,自己在二线城市买了车和房。

一个月好的时候能有十几万收入,差的时候也能有个两万块。

之所以想打造自己的IP,是因为他一直觉得做主播比较虚,而且主播这行水很深,特别是女主播,很容易被金钱诱惑深陷进去。

这个后面具体讲到。

 

女主播也太赚钱了!

有一次她在小红书无意间发了一个旅行笔记。

没想到居然火了,37万阅读,七千多点赞,涨了四千多粉丝。

但是后面就不行了,一直没找到方向。

她知道我在自媒体这行干了很多年,也做了很多成功案例,所以想来咨询下我的建议。

我看了她的账号之后,发现她最大的问题其实就是定位没找好。

今天拍个车,明天拍个健身照,乱七八糟,毫无章法。

女主播也太赚钱了!

之所以有一条笔记爆了,完全是因为运气。

更具体一点来说,完全是因为她的胸。

吸引过来的粉丝,都是一堆老色批。

一旦她发一些别的,阅读和点赞就寥寥无几。

很多人都想做自媒体,但是做自媒体IP的第一步是啥?

一定是做定位,就算是耶稣来了,也还是他妈的要搞清楚自己的定位。

直白点说就是,你得很清晰的用内容告诉你的潜在用户,你是干嘛的,你对哪个领域是擅长的,你能为他们提供什么价值等等。

因为只有确定了你的定位,你才不会遍地撒网的去引流,你才会知道你要做什么样的内容。

记住一句话,定位决定了你所做的内容。

很明显这位读者就不清楚自己的定位,导致自己不知道该发什么样的内容。

现在什么流量最好引,没得说自从有了互联网到现在,色流一直以来都是最容易引的。

女主播也太赚钱了!

但是没什么卵用。

大部分开始玩自媒体的人,之所以做不好,其实就是因为定位没有做好,后端的变现产品没想清楚,然后就开始去胡乱引流。

最后发现,没有一个人愿意为你付费。

这些流量对你来说完全就是垃圾流量,即无法保证你的转化率,还他妈浪费时间。

 

女主播也太赚钱了!

一个自媒体IP账户的定位,直接决定了这个账号最后的变现效率。

好定位+好内容+好产品+私域流量,这就是一个很完整的变现闭环。

她这个账号吸引来的粉丝,基本上都是来白嫖她的脸和身材的。

而且这种玩法,你没办法让用户感知到你的价值。

当然咱们也可以说卖脸和身材也是一种价值,但是这种价值对用户来说,他们更乐意白嫖。

 

女主播也太赚钱了!

我看了她的账号之后,发现其实她这个账号还算是很有潜力的。

长得好看,胸又大,只要把定位弄清楚,多分享一些有价值的穿搭,或者美妆内容。

多吸引一点女粉,它就是一个有价值的IP账号。

后来我还给了她一些建议,她听完瞬间觉得思路清晰了很多。

当然我也好奇她做主播的一些经历,所以昨晚就和她约了个电话,简单聊了一些直播这个行业的一些好玩的事情。

她现在的职业是一名YY上的唱歌主播。

直播干了两年,赚了快两百万,已经靠自己在二线城市买车买房。

她说他现在一个月要直播25天,一天6个小时候。

一个月好的时候能有十几万收入,差的时候也能有个2万块。

 

女主播也太赚钱了!

不直播的时候会很焦虑,一般都不会过多休息,因为害怕自己不播的时候,自己直播间的大哥就会跑去别人直播间。

她说榜上大哥的维护还是很重要的。

但是干直播到现在,除了收礼物的时候是开心的,其他时候都会很烦。

有些人就是想白嫖,刷了几百块钱加微信之后,就会提出一些无理的要求。

比如要求发点性感照片、开视频裸聊、线下见面、甚至是发生关系都有。

我问她会和榜一大哥见面吗,她说如果刷得多了会线下见面。

当然人家傍一大哥又不是人傻钱多,刷这么多钱肯定是想睡你。

但是她因为之前有男朋友,所有都会拒绝。

她说自己自尊心比较强,不想干这些事,自己也没有情商和手段能留住大哥。

做女主播靠的就是收礼物赚钱,太需要哄着别人了,她不乐意这么干,所以想尝试去做小红书,打造自己的个人IP。

直播赚的钱太虚,她有点把握不住。

 

女主播也太赚钱了!

而且在这个圈子里面待久了,看着身边毫无底线的主播,自己的三观也会发现改变。

有些主播就是很会来事,很会吊着直播间的大哥,就是那种想让你得到,又不让你得到。

这种往往是最让人上头的,诱惑无时不在,直到大哥刷不动为止。

反正在女主播这一行,越没有底线,赚得就越多。

她说,在这个时代,坏名声总比没名声好。

甚至有些直播间是不靠刷礼物赚钱的,而是整合资源。

啥意思?

比如带人去赌博,行业里有个女主播带一大哥去澳门,被人操纵输了五千多万,然后女主播从中抽成。

还有一些男主播,会招女主播当徒弟,私下开聚会。

邀请一些土豪进来玩,土豪+女徒弟,懂的都懂。

干的都是一些见不得光的事情,说白了就是拉皮条。

女主播也太赚钱了!

 

和她聊完之后,我能很明显的感受到这个24岁女孩的心态。

虽然她现在厌恶这一切,极度想要逃离和改变,但是每个月十来万的收入太有诱惑力了。

每天唱唱歌,和直播间大哥聊聊天,这种钱赚得不比打工强?

在圈子里待久了,整个人的三观都会发生天翻地覆的改变。

一个月赚过十几万的人,你说她可能再去老老实实上班吗?

直播也属于自媒体行业,但是像他们这类卖脸和身材的直播,寿命其实是非常短的。

因为会有无数个比你漂亮,身材比你好,胸比你大的人出来。

女主播也太赚钱了!

大哥们都喜新厌旧,你说你有什么竞争力。

但是打造自媒体IP就不一样,它反而是一个越做越香的方向。

随着时间的积累,你的影响力会越来越大,自然你赚到的钱就会越来越多。

前面也说过,玩自媒体IP,第一步就是要先搞清楚自己的定位。

因为定位决定了你要做什么样的内容,也影响你最终的变现。

这一步没想好的话,你的内容会非常乱,变现也就基本不要谈了。

你的定位决定了在用户眼里,你是谁,你对哪个领域是擅长的,而且是比他专业的,并且你是能为他们提供价值的。

细化一点我觉得可以分为三个点,这里分享给想要做自媒体IP的朋友们。

首先第一,身份定位。

身份定位的意思就是,你是干什么的。

比如你是教写作的、教理财的、教健身的、教减肥的、教乐器的,对吧。

就是这么简单,没有多少花里胡哨的东西,就是一句话讲清楚,你到底是干什么的。

我跟你们说,做自媒体就是做生意,最终目的是奔着赚钱去的。

我们之所以要打造个人IP,是为了提供价值、扩大知名度、积累信任、方便以后卖我们自己的产品的。

并不是为了什么装逼、粉丝多、虚荣心之类虚头巴脑的东西,就是为了赚钱,赚体面的钱。

女主播也太赚钱了!

其次,价值定位。

上面说的身份定位,是为了让用户知道你是干什么的。

这里说的价值定位,其实就是你得让你的用户自己,你能为他提供什么样的价值。

比如我之前孵化的财经IP,他的身份定位就是一个拥有十年投资经验的老司机。

它能提供什么价值,无非就是利用自己多年的投资经验,为那些想要学习理财和投资的用户,提供一整套金融方面完整的基础知识科普,和完整的投资方法论,用户更科学的利用钱生钱。

这样他平时看你的内容,不仅可以免费获得一些市场分析,还是学习到一些投资逻辑。

慢慢的,用户就会对你形成认知,慢慢的他的脑子里就会出现一个你的用户画像。

 

女主播也太赚钱了!

最后,是形式定位。

什么是形式定位?说白了就是,在你搞清楚了自己的身份定位、价值定位之后,你得想清楚,你该用什么样的形式,或者你适合什么样的形式去展示你的内容。

公众号的图文、小红书、B站、抖音的视频形式,这些都是展示的形式。

形式定位其实就相当于选平台。什么样的内容适合什么样的平台,其实都是有讲究的。

总结一下,定位其实就是,你是谁?你能提供什么样的服务?这些服务能解决用户的哪些问题?

我知道很多女主播都很赚钱,但其实说实话,这种钱赚得不长久,而且不太体面。

 

女主播也太赚钱了!

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

从98抗洪到20战疫 来自国产化的胜利

猫哥按:最近在网上看到一组数据,很有些感慨,这里与大家分享一下。

首先给一个观点——最近20年,特别是最近10年,全世界除了中美两国,其它大部分国家实际上都已经不发展了。

这个观点是有扎实的数据支持的。

2010年全球GDP大致是66万亿美元,2020年全球GDP大致是84万亿美元,10年时间全球经济增长了18万亿美元。看上去还不错是不是?

但是这个增量的财富蛋糕具体分配是极其不均衡的!

过去10年中国GDP增长了8.8万亿美元,美国增长了6万亿美元,中美合计就是14.8万亿美元,基本就是拿走全球增量财富的80%!

那么剩余20%的增量财富蛋糕是哪些国家和地区分配呢?

是中国香港、中国台湾、东盟国家、印度、德国、韩国、巴基斯坦、埃及、尼日利亚、德国、波兰、澳大利亚、新西兰。

上述国家和地区其实有一个显著规律,过去十年还能保持增长的大部分集中在亚洲,这是中国经济高速增长产生的溢出带动效应,让中国周边国家与地区在除中美之外的增量财富分配中喝到了最大一口汤。

其中最为显著的一个是东盟国家,过去10年经济增长了1万亿美元;一个是印度,过去10年也差不多增长了1万亿美元。

另外就是中国台湾与中国香港,虽然这两个地区地盘不大,但是因为与中国经济捆绑很深,所以过去10年经济也增长了3400亿美元。

其次就是少数资源型国家,包括澳大利亚、新西兰、尼日尼亚,这也是中国经济高速增长的直接受益国。

埃及背靠苏伊士运河,这是中欧贸易主要通道,随着中国商品源源不断向欧洲输送,靠着苏伊士运河收过路费,让埃及多少也能分点增量的财富。

德国能保持增长是靠着德国强大的制造业+欧盟经济一体化,让德国工业商品横扫欧盟成员国。即便如此,过去十年德国GDP也只增长了4500亿美元,甚至还比韩国低一点(韩国过去10年经济增长了4870亿美元),欧盟市场说起来基本都是发达国家,但是依托欧盟市场的德国经济增长竟然还是跑不过依托蒸蒸日上中国市场的韩国。

波兰过去10年也只增长了1100亿美元,这就是靠着向西欧劳务输出赚点老百姓打工的血汗钱。

以上数据揭示了一个残酷的规律,过去10年,如果不与中国经济捆绑几乎是没有机会实现经济增长的。换句话说,过去10年也只有中国能带动部分国家实现经济增长。

美国就没有这个带动能力。

过去10年美国经济虽然增长了6万亿美元,但这是靠着美元霸权与科技霸权在全球收割的结果,美国经济对外没有任何溢出带动效应——

所以即使经济与美国捆绑最深的加拿大、墨西哥过去10年也基本没有经济增长(2010年墨西哥GDP是1.06万亿美元,2020年墨西哥GDP是1.08万亿美元;2010年加拿大GDP是1.61万亿美元,2020年加拿大GDP是1.64万亿美元),美国经济的掠夺性通过上述数据展露无遗。

现在问题来了,为什么过去10年中国经济能够保持如此强劲的增长?

核心原因就在于我们的制造业在不断升级!

制造业升级才能摆脱外商对我们的剥削,才能将自主产业做大做强,不但能将利润、税收、就业留在国内,还能间接带动服务业的发展,甚至还能产生经济溢出带动效应,让围绕中国制造业产业链的上下游国家获得经济增长的机会。

过去10年是中国制造业升级蓬勃发展的10年,也是中国能在全球财富分配中拿走最大一块蛋糕的秘密。

同样我们也就能够理解,为什么2018年美国为了狙击中国产业升级不惜发动贸易战、科技战、金融战等等各种手段无所不用其极——过去10年中国拿到的增量财富蛋糕已经超过美国拿到的40%,再放任中国产业继续升级,未来美国连能分配的增量财富蛋糕都会大幅度缩水!

但是美国所有遏制中国的手段注定会失败,因为中国经济内生的活力以及溢出带动效应都是美国无法比拟的。

通过上述的数据也生动的说明,过去10年跟着美国混基本都在原地踏步;跟着中国混,多多少少能保持经济增长。

这就是我们一带一路倡议能越做越大的根本原因。

在可以看到的未来,以美国主导的全球经济体系注定会逐渐解体,而以中国为主导的经济体系将势不可挡成为全球经济体系的主体。

今天给大家分享一篇描述我国产业升级的文章,正是靠着我们国产制造业做大做强,才有了过去10年中国老百姓生活翻天覆地的变化,也才有了今天中国国家实力与地位的强势崛起。

长城永不倒,

国货当自强!

来源:任易      作者:任易

1998年汛期,长江、松花江、嫩江、珠江流域发生了特大洪水,那是一场全流域的大洪水,全国29个省市遭灾,受灾面积3.18亿亩,受灾人口2.23亿,死亡3004人。

最危险的时候,就是8月7日下午1点,九江长江大堤决口30米,到8日下午4点半,决口处又塌下20多米,决口宽度达到60米,时刻有可能溃坝,局面接近失控,而洪水正向九江市区蔓延,如果洪水扫过九江,那么九江460万人全部流离失所,九江浔阳、庐山两个区42万人直接面临生命危险,京广大动脉也会被拦腰切断。

猫哥也在看 | 从98抗洪到20战疫 来自国产化的胜利

大家可以看到,当大坝决口的时候,水流速度是非常快的,而决口处堤坝承受的压力,也是非常之大,意味着随时可能进一步溃坝,那就会重演花园口决堤时的惨剧,而在堤坝上的军民,更是绝无幸理。

那时,解放军接到的命令是,不惜一切代价抢堵决口,需要从江堤上不停的抛投砂石和粮包,但是洪水会瞬间将这些冲走;直到运来了钢管,把它绞成栅栏打入江底,然后飞速地抛块石、钢筋笼块逐步形成围堰,逐步降低涌入决口的水流速度,然后才能把大堤直接堵口。

那时,南京军区「红军团」和福建武警近3000人在决口内垒出160米长,6米高的围堰,都是在拼命;在50多个小时里,总共沉入9只船;沉入石块2万吨,碎沙石4万方、钢材8吨、木材50立方,组成了钢木土石组合坝,最终经过数万子弟兵连续4天在大堤上冒着生命危险的奋战,九江大堤在8月10日围堰合龙,避免了一场比唐山大地震更可怕的惨剧。

20年前,我们是冒着生命危险,用人力去填,誓与大堤共存亡,何等悲壮!幸好我们现在已经是一个工业国,能用机械做到的事,就不再需要子弟兵冒着生命危险去保卫人民生命财产安全了。

20年后,我们不但有了海量的工程自卸车、挖掘机、推土机、装载机,还有了更强大的工业力量。

猫哥也在看 | 从98抗洪到20战疫 来自国产化的胜利

这是2017年3月,武穴市长江大桥钢围堰下水的图片和视频,这个庞然大物有多大呢?8层楼高。大家可以看看它跟卡车和人的对比就能感受到了。这个多重呢?自重4000吨。我们再回忆一下当年九江大堤决口的时候,我们一共抛投了8吨钢材,2万吨石块,8万方沙土;如果在98年,我国有这样的工业能力,还需要子弟兵去拿命拼么?

再感受一下珠港澳大桥的沉管,珠港澳大桥海底隧道总长5664米,由33节沉管对接而成,每节标准沉管长180 米、宽38 米、高11.4 米,单管节重达7.4万吨。大家感受一下沉管跟塔吊的高度对比,就能感受到这是怎样的超级工程;如果在98年,我国有这样的工业能力,还是否需要子弟兵在大坝上奋战4天?

猫哥也在看 | 从98抗洪到20战疫 来自国产化的胜利

最后再感受一下10天建成火神山医院的超神速度,上百台挖机同步开挖,进行场地平整工作;而雷神山施工的最高峰时,有1306台工程设备同步开工,如果在98年,我国有这样的工业组织能力,还是否需要7000子弟兵在九江大堤上舍命抗战?

猫哥也在看 | 从98抗洪到20战疫 来自国产化的胜利

幸好我国已经是一个有完整工业种类的制造业强国。在2020年的这场疫情里,因为制造业的强大,我们抵御风险的能力更加强大。

患者需要氧气?医院供应不足?中石化长岭炼化可以产出纯度为99.8%的优质医用氧,每天可以稳定运输50吨医用氧气到武汉,缓解氧气供应问题;

医患需要口罩?中原石化、海南炼化立刻开始调整产品结构,开始生产聚丙烯;到2月17日,海南炼化顺利完成1500吨聚丙烯PPH-Y40的生产,到今天已经陆续投入市场。为什么是海南?因为海南当地就有熔喷无纺布生产企业。大家还记得我前面那篇关于口罩的文章吧?1.32吨聚丙烯可以生产33万个口罩,1500吨聚丙烯就可以生产4.95亿个医用口罩,四舍五入就是5个亿。

口罩的耳带由氨纶长丝做的,而氨纶长丝又是由聚四氢呋喃生产而得,仪征化纤迅速开始生产四氢呋喃(THF),在2月16日已经生产了210吨,可以全部用于生产口罩耳带;所以中石化才能豪气干云的喊出「我有熔喷布,谁有口罩机」!

猫哥也在看 | 从98抗洪到20战疫 来自国产化的胜利

如果我们不是工业国,谁能想得到以前做电池的比亚迪、做手机的富士康,分分钟爆出来十几条口罩的生产线,一天就能生产上百万个口罩?就算有产能,又上哪儿去买熔喷布和耳带?

1998年抗洪,解放军调用了车辆23.68万台次、舟艇3.57万艘次、飞机和直升机1289架次,但是那时我们的运输机是什么?运12,载重不到2吨。而2020年我们的运输机是什么?运20,载重66吨。现在我国为了堵口,可以眼睛都不眨地把一台载重30吨的大卡车(20万)满载麻石直接开进水里堵口,就是这么霸气,不差钱,不差车(司机安全)。

猫哥也在看 | 从98抗洪到20战疫 来自国产化的胜利

幸好改革开放40年来,我们在一步一步地推进国产化。无法国产化就意味着需要在国际市场上高价采购,随时面临技术封锁和禁止出口。比如2月17日,美国准备限制GE公司向中国出口LEAP-1C涡扇发动机,而这个发动机是中国自主研发的民航客机C919所使用的发动机,目前还没有Plan B。这就是美帝司空见惯的技术封锁。

猫哥也在看 | 从98抗洪到20战疫 来自国产化的胜利

无法国产化就意味着国内庞大的采购需求最后仅仅养肥了一批买办,而我等工科学生只有顶尖的一批人能够加入国际高精尖企业拿高薪,其他人只能苦逼兮兮的去加入代工厂。

随便说几个我熟悉的行业

1  集成电路行业国产化

无论精密机床、数控机床等基础工业,还是导弹、雷达、舰艇、航空航天等尖端产业,都需要集成电路作为核心。在上世纪80年代初,8086的芯片都需要进口,那个时候全国才有多少外汇?靠出口纺织品工艺品出口家具之类换回来的外汇,再花高价从国际市场上购买8086/8088这种成本微乎其微的芯片,而且高端芯片动辄遭到巴统的封锁,这种酸爽,简直让人忍无可忍。

中科院微电子所、清华微电子所、复旦微电子所等一批微电子所的主要工作,就是应对很多国家对中国微电子行业主流制造技术实施的技术封锁,那一阶段,微电子所的主要工作是开发集成电路的生产工艺。

简而言之,当某微电子所做出了0.6um的集成电路生产工艺后,我们就会展示给美帝和巴统一个信息:我国已经掌握这项技术,贵国如果继续封锁0.6um工艺的芯片出口我国,或者卖高价给我国,那么鄙国将用五年时间自行开发并生产,不再进口贵国芯片。于是美帝的行业协会就会游说国会批准开放此项产品的对华出口。

现在中国仍然在进口大量的芯片,但是一方面,中端及以下芯片(中芯国际SMIC)绝对能够国产,只进口高端芯片;另一方面把钱给台积电(TSMC)和台联电(UMC)总比给美帝的垄断企业要强。

给大家讲个故事,我们做模拟集成电路和射频电路的时候,如果想借鉴国外某些重要芯片的话怎么办呢?我们会先打磨掉封装,然后拆出芯片;用蚀刻的方式一层层的脱掉芯片上层的覆层,然后照相,人工扒版图,分析出电路,用Spectrum仿真工具进行仿真,Ohyeah!

就靠这样的野蛮生长的手段,我国从90年前后开始发展集成电路产业,行业先以掌握先进制造工艺为目标进行尖端研发,获得新型芯片的进口权;然后通过多个渠道寻求世界先进的芯片代工厂落户中国,遂有了张汝京2000年开始在北京亦庄搞了中芯国际(SMIC),04年开始鼓励集成电路产业发展,各大高校每年至少培养2000名以上的工程师输送到IC行业。07年时候西安那边的英飞凌、奇梦达等IC企业也发展得红红火火。

我不知道09年金融危机时候,有没有哪家公司收购了国际上的IC行业核心技术,但我知道的是到2014年,在集成电路产业发展了25年后,北方微电子公司自主研发的12英寸28纳米等离子硅刻蚀机全面通过中芯国际(SMIC)生产线全流程工艺验证,并获得订单。这TMD就是零的突破!

对我们百姓有什么好处:

现在的路由器只要100块钱一个,功能齐全,如果没有国产化的话,估计家用路由器都要100刀一个。

2015年,采用高通方案的手机动辄4000以上,但是采用展讯方案、MTK方案、华为海思方案的智能手机平均价800块,才有了大家喜闻乐见的微信陌陌约约约;等到2020年,华为麒麟960芯片已经足矣跟高通分庭抗礼;高通也低下了头,小米10放了全部顶尖配置,也不过才4000块钱。

今天一个TCL的全自动洗衣机不过800块钱,如果低端芯片没有国产化,一个芯片卖你25刀已经是友情价了。

2004、05年,便携MP3设备多贵?随便一个要1000往上吧?等到珠海炬力搞出了国产化的MP3解码芯片,然后MP3瞬间普及……

芯片的国产化带来的受益人数最多的好处,就是把原来的高端设备迅速送入寻常百姓家。

2  轨道交通设备国产化

跟上国际社会发展的脚步非常困难,中国不能长期处于国际产业链的低端,在关键技术和关键设备上更不能长期受制于人。中国无法从国外买来一个现代化。(除非14亿人民加班加点种地纺织搞代加工来支撑5千万上等人的现代化生活)

轨道交通领域就是一个标准例子。记得到2010年,发改委一共批了25+10共35个城市50条地铁线路的建设,每条地铁的成本大约为200亿,其中机电设备(机车、轨道、盾构机、接触网、屏蔽门、自动售检票等等)至少80亿,50条线就是4000亿。只有形成我国轨道交通装备研发制造体系,才能有效降低地铁造价。

如果购买全进口设备,机电设备成本至少要上浮50%,而花了这么多钱,有哪些人得到好处呢?国际产品生产商。他们的毛利至少在50%以上,所以产品生产商的工程师才能每周工作5天,每天工作5个小时,一年有一个多月假期,到中国都是商务舱+五星酒店。

产品代理商花了5%的商业成本拿走8%左右的利润,增值税17%(地铁建设就是中央和地方政府投资,增值税就是左手倒右手),进口退税,清关报关什么的,代理商做了4000亿的生意,只留下300亿的利润,仅仅直接创造了3000人左右的就业岗位。

如果实现国产化,4000亿的工业销售额额会养活多少人?反正华为2013年有2390亿元销售额,有15万员工(华为的员工工资还很高),为华为做外包或者下包的配套企业也不计其数;4000亿的机电设备采购直接创造40万人以上的工作岗位,我认为是比较保守的。

40万高收入人群的消费又能带动多大的餐饮、娱乐、家电、汽车和住房市场?

所以,工业界建立完整工业体系,在关键技术和设备上实现国产化,才是真正共同富裕的方法。否则只能有一小撮人富裕起来,永远没法先富带动后富,就像现在的印度。

讲个AFC(自动售检票系统)国产化的故事。主角是上海华虹。上海轨道交通1、2号线的AFC全部从美国CUBIC公司的产品,于1998年9月完成1号线调试。1999年3月运营。但是全部进口的缺点有造价昂贵、运营费用高、关键技术保密导致系统维护和升级困难、备品备件不足、资深维保人员要从美国飞过来,而且工时费从美国出发时开始计算。

于是在3号线招标时候,政府就要求国外供应商提供国产化措施,遂由上海华虹和西班牙INDRA公司联合体中标,在实施中逐步实现应用软件本地化,维修零部件的国产化。

其实这个时候上海华虹的水平还有限,但是架不住政府扶持——政府认为上海华虹初步具备了独立设计和制造的能力,于是在2001年末1号线北延线的AFC招标中,上海华虹用6000万的价格干掉了CUBIC公司,并且实打实的在2004年把活干完了,而且培养了一票人,被高新现代、上海邮通、上海华腾之类的单位再高薪一挖——到2008年时,国内AFC行业就基本没外国公司什么事了。

一条线一个亿的合同额,50条线就被上海华腾、上海华虹、南京熊猫、高新现代、北大方正、浙大网新这些单位给瓜分了,价格降低了,服务到位了,然后地铁就在各大城市多点开花了。

而且这个时候,上海华虹还跟复旦微电子(你看我第一个说的就是微电子)合作,可以整系统的提供国产化产品,还带动了微电子行业的发展。

这个故事厉害的地方在于,从引进技术到踢开老外,只用了8年不到的时间,而且还培养了一大批从业人员。

3  石油化工领域设备国产化

前面两个例子的规模都不算大,真正大头的还是在石化行业!我在石化行业干了6年,也是与有荣焉。

一个问题:一个百万人口地区的基本生产需要哪些工业?

回答:小煤矿、小钢铁厂、小机械厂、小化肥厂、小水泥厂、小发电厂、小纺织厂、小印刷厂、小食品厂。

这其实是1970年国家制订第四个五年计划的时候所提出来的一个方案,具体内容是由中央财政拨出80亿元的专项资金,扶持各省区发展小煤矿、小钢铁厂、小化肥厂、小水泥厂和小机械厂等五类工业项目。

当时进行了第二次大规模成套技术设备的引进,对外实际签订的项目共26个,其中投资在10亿元人民币以上的有辽阳石油化纤总厂(29亿人民币)、武钢的一米七轧机(27.6亿人民币)、大庆化肥厂(日元贷款,汇率调整,投资增加到26.7亿人民币)、上海石油化工总厂(20亿人民币)、天津石油化纤厂(13.5亿人民币)

注意啊,这是1970年的116.5亿,那时的官方汇率是人民币兑美元是2.46哦!47亿美元哦!!!1970年外汇储备花得只剩2000万美元,直到1975年才有5亿美元的外汇储备!!!另外,1979年中国货币供应量为26亿元,GDP为272亿美元(数字均来自网络,请有识之士打脸)

中国那点外汇,拿来引进乙烯化肥装置都不够,还想要买什么电视机?

这是20世纪70年代引进的13套大型化肥装置一览表:

猫哥也在看 | 从98抗洪到20战疫 来自国产化的胜利

以上13套装置中,除洞氮、安庆、枝江三套装置以石脑油为原料外,其余均以天然气为原料。以天然气为原料的10套装置主要的技术进口国为美国和荷兰,合成氨装置采用美国凯洛格生产工艺,尿素装置采用荷兰斯塔米卡邦二氧化碳汽提生产工艺。部分企业采用了日本东洋工程公司的合成氨/尿素工艺。

一亩地一年要用10公斤化肥,引进了390万吨化肥生产设备,约能满足2.6亿人的化肥需求。

我们的前辈(都还健在)就是靠着当年的引进装备加技术,抽调人力进行攻关,如11万吨乙烯设备攻关,30万吨乙烯设备攻关,大化肥攻关等等,靠着当年那帮善于借鉴、学习、研究的前辈的努力,一口一口的啃下来石油化工装置的生产线,直接或间接地解决了全国人民吃饭的问题。

完整的工业体系建设,让中国有能力在建筑工程、高速铁路、油田、炼油、化工、造船等领域,一个一个陆陆续续的拿到了很多的世界第一。

2010年,在苏州昆山,一台10万吨级的液压模锻机已经拔地而起,这是到2010年为止,全球最大的模锻机。

2013年,振华重工在巴西交付了最大的龙门吊。

2013年,中科湛江炼化投资600亿,1500万吨炼油能力,100万吨乙烯!仅仅合算90亿美元。再想想70年代。

2018年,我们看到了南海岛礁的鬼斧神工

2019年,珠港澳大桥建成,这是世界上最长的公路沉管隧道和唯一的深埋沉管隧道,被誉为交通工程界的“珠穆朗玛峰”。

猫哥也在看 | 从98抗洪到20战疫 来自国产化的胜利

如果没有基础工业体系的国产化,光一台低精度的精密车床就能要你300万,高端的还对华禁运,更别提搞什么螺旋桨、潜艇、大飞机了。到我们老百姓这里,就只能放弃高铁和次日达的物流,一辈子跟绿皮车打交道吧。

多亏前辈的努力,才能在40年里从无到有地把我国发展成了制造狂魔和基建狂魔,建成了覆盖全国的高速公路、高速铁路、260个机场,才能让我们毫不费力地向受灾地区转运物资,才真正实现了一方有难,八方支援,当日到达的中国速度!

到了2020年,我再不相信有什么困难,能够阻挡基建狂魔和14亿人民的前进脚步。

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


拜登惨败,特朗普正在卷土重来!

 

今天是特朗普离开白宫的第293天!

在这293天内,我们很少写特朗普的事情,但是特朗普却一直没有闲着!

自从特朗普离开白宫以后,大家也不怎么关心他了,再加上美国主流媒体也不报道相关信息(中国很多媒体都是抄袭美国主流媒体的新闻),所以很多事情大家也不知道。

事实上,在特朗普离开白宫后做了很多非常大的事情,其中最重要的一件事就是——完成党内的“清洗”工作,为2022年的中期选举和2024年的总统大选奠定了基础。

与之相对的,拜登的无能让民主党处于非常被动的状态。目前拜登的支持率已经跌破40%(特朗普支持率最低的时候也没有跌破40%),创造美国历任总统的最低,甚至已经有人把拜登排为美国历史上的最差总统!

拜登惨败,特朗普正在卷土重来!

今天,我们就和大家说说特朗普和拜登的事情。

以前我们就和大家说过,特朗普并不是一个真正的共和党人,他只是借用了共和党的“皮”——美国是两党轮流执政,如果特朗普不借用共和党的“皮”,那么他是没有机会获得总统职位的。

特朗普不是一个真正的共和党人,但是他却将共和党打造成一个完全属于自己的政党了。

为什么这么说?

如果你对美国政坛比较了解,你就会知道现在的共和党已经完成不是以前的共和党了,因为以前的共和党是为富人服务的(2016年之前,穷人都是支持民主党的)。比如,共和党支持低税率,这是为富人服务的;共和党支持减少各种监管,这也是为富人服务的……

但是,通过2016年和2020年美国总统大选,大家就会发现现在支持共和党的竟然是广大的农村地区——虽然特朗普输掉了大选,但是支持特朗普的面积却非常的大,这就说明广大的贫穷地区都是支持特朗普的。

拜登惨败,特朗普正在卷土重来!

共和党是一个为富人服务的政党,为什么会得到穷人的支持?

其根本原因就是:美国的那些穷人以前都是中产阶级,并不穷,但是由于全球化让美国的产业空心化了,从而导致那些人失去了高薪工作,所以他们支持逆全球化,自然也就选择了支持特朗普。

特朗普借着共和党的“皮”,那么最终只可能有两个结果:

第一,共和党彻底被打造成属于特朗普的共和党;

第二,特朗普彻底的被共和党给抛弃了。

然而,我们看到的最终结果是:特朗普凭借一己之力,改变了整个共和党的属性!

既然特朗普不是真正的共和党,那么党内必然有很多反对自己的力量——关于这点,在特朗普执政期间表现的非常明显,每次在国会投票的时候,总有一些共和党的议员“反水”。相反,民主党则极少有反水的。

对于特朗普来说,他原本只是“寄生”于共和党,如果他不能彻底控制“宿主”,那么他必然要被无情的消灭,所以对于特朗普来说,没有其它的路可以选择——他只能选择彻底的控制共和党,否则他就会被灭亡!

既然特朗普要打造一个完全听命于自己的政党,那么必然要对党内“异己”势力进行“大清洗”。所以,在特朗普离开白宫以后,最重要的一件事情就是——完成对党内的清洗工作。

那么,特朗普能不能完成党内的清洗工作?

当然能了,因为特朗普在党内的支持率非常高,而且在共和党选民中的支持率非常高,在庞大支持率的支撑下,任何反对特朗普的势力都没有生存空间!

这是什么意思?

由于特朗普在党内拥有庞大的支持率,如果共和党的高层想要联手把特朗普排挤出去,那么特朗普只要振臂一呼,那么绝大多数的共和党党员都会跟着特朗普走了,特朗普完全可以成立一个新政党,那么共和党就彻底完蛋了——特朗普执政期间,在党内的支持率达90%以上,即使是现在,特朗普在党内的支持率仍高达70%以上。

拜登惨败,特朗普正在卷土重来!

正是因为特朗普在党内和老百姓中的超高支持率,并且在特朗普离开白宫以后支持率仍没有出现比较大的下降,这让那些曾经反对特朗普的共和党大佬非常害怕,最终不得不向特朗普屈服。

或许有人不理解,那些大佬为什么要向特朗普屈服?

事情是这样的,所谓的党内大佬就是那些州长和议员,而这些州长和议员都需要老百姓投票的,如果这些州长和议员不听从特朗普的话,那么在下一次选举中,他们就会丢掉州长和议员的位置,成为一个无足轻重的党员。

比如,我是共和党人,我是德克萨斯州的州长,如果我不支持特朗普,那么在下次州长选举的过程中,特朗普就会支持一个支持他的共和党人,呼吁老百姓都把票投给那个人,那时我必然无法获得连任;我非但无法获得连任,我甚至在党内都可能无法立足,因为特朗普在党内的支持率也异常的高,我想要在党内获得更高的职务,也需要党内的投票。

所以,在特朗普离开白宫以后,一些曾反对他的大佬发现特朗普依旧拥有超高的支持率,于是一个个都去向特朗普表忠心了,表示全力支持特朗普。

共和党参议员格雷厄姆在今年5月份的时候曾公开表示,至今众多共和党选民对特朗普“非常忠诚”。因此,共和党想要取得选举胜利离不开特朗普的支持。

在特朗普大选结果无法逆转以后,党内一号人物麦康奈尔,党内二号人物麦卡锡、党内三号人物丽兹·切尼都准备动手除掉特朗普,他们准备联手成立“跨党派调查小组”来调查川粉攻占国会山事件!

拜登惨败,特朗普正在卷土重来!

但是,当他们发现特朗普离开白宫以后,依旧拥有庞大的支持率,于是麦康奈尔、麦卡锡向特朗普“投降”了,不再提成立调查小组的事情,只剩一个死硬派的丽兹·切尼。

丽兹·切是谁?

她是前美国副总统切尼的长女,曾担任美国国务院近东局的副助理国务卿,曾担任众议员和众议院共和党会议主席。她不仅是一个官二代,而且拥有丰富的从政经历,能量非常巨大。

她做了什么事情呢?

三件事:

第一件,否认特朗普的“大选作弊说”——整个共和党内,几乎都支持特朗普的“大选作弊说”,而丽兹·切是极少数承认拜登通过合法方式获得总统位置的人。

拜登惨败,特朗普正在卷土重来!

第二件,曾在弹劾特朗普案中投下同意票;

第三件,支持成立跨党派小组调查特朗普在“攻占国会山事件”中的作用。

于是,特朗普对其进行“开刀”了,在党内召开多场会议专门讨论切尼的问题,最终做出决定:切尼违背共和党的长期价值和利益,全体党员投票决定,罢免切尼包括“众议院共和党会议主席”在内的一切党职务。

拜登惨败,特朗普正在卷土重来!

自此,特朗普完成了对党内的主要“清洗”任务,彻底的控制了共和党。

与特朗普在党内取得的“辉煌”成就相比,拜登则一塌糊涂。

拜登上台以后,几乎一事无成!

主要体现在三个方面:

第一,疫情始终控制不住,经济迟迟得不到恢复;

目前,美国现有确诊917万,日增确诊9万,累计死亡已经达到77.6万。受疫情影响,美国供应链出现严重的问题,经济迟迟得不到恢复。

第二,美国从阿富汗撤军后,阿富汗政府快速溃败,让塔利班再次获得了政权;

第三,物价高企,老百姓怨声载道。

 

由于拜登的无能,出现了两个比较严重的后果:

第一,拜登支持率出现严重下滑;

美国《今日美国报》和萨福克大学在11月7日发布的联合民意调查结果显示,民主党籍总统约瑟夫·拜登所获支持率已经跌至38%,近三分之二调查对象不希望看到拜登角逐2024年总统选举。

目前拜登的支持率跌幅创下二战以来最高,特朗普已经把拜登形容为“史上最无能总统”。

拜登惨败,特朗普正在卷土重来!

第二,民主党丢掉了铁杆州的大选。

进入11月,美国的弗吉尼亚州新泽西州进行了州长选举,这两个州都是深蓝州,属于民主党的基本盘,在2020年美国总统大选期间,现任总统拜登在这两个州以绝对优势支持率战胜时任总统特朗普,从而一举完全获得这两个州的选举人票。

按照正常道理,民主党人在这两个州获得州长位置应该是毫无悬念的,但开票后的结果却让人大跌眼镜:

首先,在弗吉尼亚州,共和党州长候选人格伦·扬金以51%的得票率一举击败得票率为48.3%的民主党候选人特里·麦考利夫,从而赢得该州州长选举,使得该州12年来由深蓝州变为红州。

最关键的是:新选州长几乎是和特朗普一模一样的,没有从政经历、政治主张几乎和特朗普完全一致。

一个民主党的铁杆州选出了一个和特朗普一模一样的州长,这就非常可怕了。

拜登惨败,特朗普正在卷土重来!

其次,虽然民主党最终赢得新泽西州选举,但获胜的异常艰难,民主党候选人最终得票仅比共和党候选人多出1个百分点——对比2017年墨菲竞选州长,当时是以14%的优势战胜共和党竞争者,但这次选举共和党的支持率可是紧跟民主党的。

其中还有一个非常重要的细节:以新泽西州为首的美国东北部州,民主党登记的选民要远超共和党100万,而且新泽西州的白人居民人数不到该州总人数的一半,根据常识,多种族族群一般会把选票投给民主党。但是,在这次州长选举的过程中,共和党的支持率却和民主党相差不大。

民主党两个铁杆州都出现了这么大的变化,可想而知一些“摇摆州”会变成什么样呢?肯定是全面倒向共和党了。在美国选举中,最关键的就是那些摇摆州——得摇摆州者得天下!

由此可见,现在的民主党在美国老百姓中的支持率有多低了!

2022年,美国的中期选举就要开始了,如果拜登不能扭转目前的被动局面,届时共和党就可能完全控制整个参议院和众议院,那时拜登政府就会成为一个彻底的“跛脚政府”,所有重大政策都无法通过——参议院控制人事任命权、众议院控制财政权。

一旦出现那种结果,那么后面两年,拜登的任何政策都别想通过参众两院,拜登将继续“一事无成”。

说实话,我是非常喜欢特朗普的,喜欢他是因为他不虚伪。

 

美国搞乱叙利亚,让叙利亚陷入9年的内战中,但是叙利亚总统巴沙尔却认为特朗普是美国历史上最好的总统。

2019年的时候,叙利亚总统巴沙尔在接受叙利亚国家电视台采访的时候称特朗普是“最好的美国总统”,因为其他总统说一套做一套,都是战争贩子,而特朗普“说抢石油就抢石油,不虚伪,很实诚”。

巴沙尔表示,特朗普总是做出最直截了当的明示,直接反应美国的需求:“我们需要石油”、“我们要摆脱这样的困境”、“我们想要提供服务以换取金钱”等等。

阿萨德表示,所有的美国总统都犯下了各种各样的政治暴行和所有的罪行,但他们(奥巴马)仍然赢得了诺贝尔奖,并把自己标榜为人权的领袖,拥有和高尚而独特的美国价值观,或成为西方普世价值观的捍卫者。事实是,他们是一群罪犯,代表着美国大集团的利益,即大型石油和军火公司等。而特朗普则比较实诚。

拜登惨败,特朗普正在卷土重来!

说实话,巴沙尔的话真是说到我心里去了。

民主党那些伪君子,想要抢你的石油、想打压你的企业、想逼迫你让步,总要打着“民主、自由、人权”的那套东西来恶心你,而特朗普则简单的多:别和我扯那些没用的,我就是要光明正大的抢你的石油、打压你的企业、逼迫你投降!

我也是希望共和党能在明年的中期选举中击败民主党,那样民主党就会一事无成,然后消耗两年后,特朗普再回来,回来以后再把拜登的政策全部推翻,从头开始!

就让美国这样一轮又一轮的内耗下去!

—–全文到此为止。如

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

这个超级大省,正在疯狂建大学,京沪遇到今生最强对手!

百年大计,教育为本。

 

这个超级大省,正在疯狂建大学,京沪遇到今生最强对手!

 

中国经济第一大省,正在迈向教育强省。

 

近日,《广东省教育发展“十四五”规划》发布,提出深入实施“冲一流、补短板、强特色”提升计划,加快推进高水平大学建设、建设世界一流大学和一流学科。

这个超级大省,正在疯狂建大学,京沪遇到今生最强对手!

这份规划在高等教育方面有诸多亮点:

1、推动华南农业大学、南方医科大学、广东工业大学、广州医科大学、深圳大学、南方科技大学等高水平大学进入国家“双一流”建设高校范围;

2、提升广州、深圳地区高校建设水平,高标准建设深圳理工大学、深圳海洋大学、深圳创新创意设计学院、广州交通大学等高校。

3、大力推进香港科技大学(广州)建设,加快推动香港城市大学、香港都会大学、香港理工大学、香港大学、澳门科技大学、澳门城市大学等港澳高校来粤办学。

4、支持珠三角其他城市高等教育改革发展,加快筹设大湾区大学、中山科技大学等高校。

5、支持汕头加快打造区域教育高地。支持汕头、湛江打造特色鲜明的高校集群,推进汕头大学、广东海洋大学、广东石油化工学院等围绕海洋科学、生物学、化工、石油、食品、纺织、生物医药等学科专业领域引进和培育高层次人才。

……

 

这意味着什么?

 

这个超级大省,正在疯狂建大学,京沪遇到今生最强对手!

 

广东何以建设教育强省?

 

其一,未来,广东或有11所“双一流大学”。

 

明年,第二批双一流高校建设名单即将公布,双一流大学即将迎来5年一次的大洗牌,有大学晋级自然也有退出。

 

目前,广东已有5所“双一流大学,全部位于广州。包括中山大学、华南理工大学2所一流高校,以及暨南大学、广州中医药大学及华南师范大学3所一流学科建设高校。

这个超级大省,正在疯狂建大学,京沪遇到今生最强对手!

 

根据规划,2022年,广东将推进1-2所高校入选双一流高校。这其中,综合实力突出的华南农业大学、南方科技大学、深圳大学概率较高。

 

面向更长远的未来,南方医科大学、广东工业大学、广州医科大学也有望晋级双一流高校建设范围。

 

其二,广东将新建一批高校,广州、深圳、东莞、中山等地均有覆盖。

 

根据规划,建设深圳理工大学、深圳海洋大学、深圳创新创意设计学院、广州交通大学等高校……加快筹设大湾区大学、中山科技大学等高校。

 

这其中动作最大的当属深圳。

 

作为中国经济第三大市,深圳高等教育发展水平与经济实力远远不相称,不仅至今双一流高校挂零,而且大学生人数在排在全国末位,甚至不及一些普通二线城市。

这个超级大省,正在疯狂建大学,京沪遇到今生最强对手!

因此,深圳不惜耗费重金,引进港澳及内地的名校在深建设分校,同时大建新一批高等院校。

 

当然,东莞、佛山、中山、珠海等地也纷纷提出建设一批高校,其中最受瞩目的当属东莞的大湾区大学。

 

能以大湾区来冠名,这体现东莞这个制造强市对于一流高等教育的必得之心。目前,大湾区大学已经动工建设,力争2023年实现招生办学。

 

其三,港澳高校纷纷在珠三角建分校,助力大湾区打造国际教育高地。

 

港澳高校综合实力位居世界前列。根据QS2022世界大学排名,香港大学、香港科技大学等5所高校跻身前100,而中山大学、华南理工大学分别位列第260位、407位。

这个超级大省,正在疯狂建大学,京沪遇到今生最强对手!

 

所以,港澳高校挺进珠三角,不仅有利于提升大湾区整体的教育实力,而且有助于广东教育与国际接轨。

 

目前,香港中文大学(深圳)已经正式招生,香港科技大学(广州)将于2022年开始办学,其他高校也正在筹备或建设之中。

 

其四,作为省域副中心城市,粤东西北地区的湛江、汕头两地被委以重任。

 

根据规划,支持汕头、湛江两个省域副中心城市打造特色鲜明的高校集群,推进汕头大学、广东海洋大学、广东石油化工学院围绕海洋科学、化工等学科培育高层次人才。

 

近年来,广东构建了“一核一带一区”的发展新格局:珠三角是核心区和主引擎,粤东粤西为沿海经济带,粤北则为生态屏障。

这个超级大省,正在疯狂建大学,京沪遇到今生最强对手!

 

根据相关规划,广东将支持沿海经济带发展海上风电、核电、绿色石化、海工装备等产业。

 

所以,汕头、湛江两地高等教育发展的重点也在于此,以高校科研力量,服务于沿海经济带发展,担起粤东、粤西沿海两翼发展的重任。

 

这个超级大省,正在疯狂建大学,京沪遇到今生最强对手!

 

广东为何要拼命建大学?

 

广东虽然收获了无数个“第一”,但在高等教育上只能称为“大省”,而非“强省”,与北京、上海、江苏等均存在一定差距。

 

数据显示,广东坐拥150多所高校、40多个国家重点实验室,但只有4所211高校、5所双一流大学。

这个超级大省,正在疯狂建大学,京沪遇到今生最强对手!

 

相比而言,北京拥有34所双一流高校,江苏15所,上海14所,而四川、陕西、湖北也都比广东多。

 

广东虽然在校本专科学生数量位居全国第二,但专科生占了接近一半,同时在校研究生数量不及一些教育强省。

 

数据显示,2020年,广东全省在校研究生人数为15.47万,而同期北京、上海和江苏分别为43万、22.6万和26.6万,而湖北也超过了20万。

这个超级大省,正在疯狂建大学,京沪遇到今生最强对手!

 

 根据规划,到2025年,广东预期研究生在校生人数达到24万,相比2020年增加55%,这无疑是巨大的挑战。

 

同时,作为制造大省,广东正在担起产业转型升级的重任,从传统的加工制造产业向高新产业的全面转型,更离不开高学历人才的支撑。

 

虽然孔雀东南飞效应依旧,无数大学生从全国各地奔赴广东,但作为第一大省,广东有必要主动培育更多高端人才。

 

所以,从经济强省到教育强省,广东需要全方位“补课”,一场高校大建设不可避免。

◎本文作者 | 凯风

克而瑞统计,一个城市大学生占比越高,房价越抗跌。
广东疯狂建大学,让更多大学毕业生留在广东。
多一张校牌,相当于多了一张“免跌金牌”。

转自:https://mp.weixin.qq.com/s/1xi02mDtEcwd46nD0c0QvA

如何理解 Python 装饰器

推荐关注↓

装饰器简介

装饰器(decorator)是一种高级Python语法。可以对一个函数、方法或者类进行加工。在Python中,我们有多种方法对函数和类进行加工,相对于其它方式,装饰器语法简单,代码可读性高。因此,装饰器在Python项目中有广泛的应用。修饰器经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理, Web权限校验, Cache等

装饰器的优点是能够抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。即,可以将函数“修饰”为完全不同的行为,可以有效的将业务逻辑正交分解。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。例如记录日志,需要对某些函数进行记录。笨的办法,每个函数加入代码,如果代码变了,就悲催了。装饰器的办法,定义一个专门日志记录的装饰器,对需要的函数进行装饰。

如何理解 Python 装饰器

Python 的 Decorator在使用上和Java/C#的Annotation很相似,都是在方法名前面加一个@XXX注解来为这个方法装饰一些东西。但是,Java/C#的Annotation也很让人望而却步,在使用它之前你需要了解一堆Annotation的类库文档,让人感觉就是在学另外一门语言。而Python使用了一种相对于Decorator Pattern和Annotation来说非常优雅的方法,这种方法不需要你去掌握什么复杂的OO模型或是Annotation的各种类库规定,完全就是语言层面的玩法:一种函数式编程的技巧。

装饰器背后的原理

在Python中,装饰器实现是十分方便。原因是:函数可以被扔来扔去。

Python的函数就是对象

要理解装饰器,就必须先知道,在Python里,函数也是对象(functions are objects)。明白这一点非常重要,让我们通过一个例子来看看为什么。

def shout(word="yes"):

    **return** word.capitalize() + "!"

print(shout())

# outputs : 'Yes!'

# 作为一个对象,你可以像其他对象一样把函数赋值给其他变量

scream = shout

# 注意我们没有用括号:我们不是在调用函数,

# 而是把函数'shout'的值绑定到'scream'这个变量上

# 这也意味着你可以通过'scream'这个变量来调用'shout'函数

print(scream())

# outputs : 'Yes!'

# 不仅如此,这也还意味着你可以把原来的名字'shout'删掉,

# 而这个函数仍然可以通过'scream'来访问

del shout

**try**:

    print(shout())

**except** NameError as e:

    print(e)

    # outputs: "name 'shout' is not defined"

print(scream())

# outputs: 'Yes!'

Python 函数的另一个有趣的特性是,它们可以在另一个函数体内定义。

def talk():

    # 你可以在 'talk' 里动态的(on the fly)定义一个函数...

    **def** whisper(word="yes"):

        **return** word.lower() + "..."

    # ... 然后马上调用它!

    print(whisper())

# 每当调用'talk',都会定义一次'whisper',然后'whisper'在'talk'里被调用

talk()

# outputs:

# "yes..."

# 但是"whisper" 在 "talk"外并不存在:

**try**:

    print(whisper())

**except** NameError as e:

    print(e)

    # outputs : "name 'whisper' is not defined"

函数引用(Functions references)

你刚刚已经知道了,Python的函数也是对象,因此:

  • 可以被赋值给变量
  • 可以在另一个函数体内定义

那么,这样就意味着一个函数可以返回另一个函数:

def get_talk(type="shout"):

    # 我们先动态定义一些函数

    **def** shout(word="yes"):

        **return** word.capitalize() + "!"

    **def** whisper(word="yes"):

        **return** word.lower() + "..."

    # 然后返回其中一个

    **if** type == "shout":

        # 注意:我们是在返回函数对象,而不是调用函数,所以不要用到括号 "()"

        **return** shout

    **else**:

        **return** whisper

# 那你改如何使用d呢?

# 先把函数赋值给一个变量

talk = get_talk()

# 你可以发现 "talk" 其实是一个函数对象:

print(talk)

# outputs : <function shout at 0xb7ea817c>

# 这个对象就是 get_talk 函数返回的:

print(talk())

# outputs : Yes!

# 你甚至还可以直接这样使用:

print(get_talk("whisper")())

# outputs : yes...

既然可以返回一个函数,那么也就可以像参数一样传递:

def shout(word="yes"):

    **return** word.capitalize() + "!"

scream = shout

**def** do_something_before(func):

    print("I do something before then I call the function you gave me")

    print(func())

do_something_before(scream)

# outputs:

# I do something before then I call the function you gave me

# Yes!

装饰器实战

现在已经具备了理解装饰器的所有基础知识了。装饰器也就是一种包装材料,它们可以让你在执行被装饰的函数之前或之后执行其他代码,而且不需要修改函数本身。

手工制作的装饰器

# 一个装饰器是一个需要另一个函数作为参数的函数

**def** my_shiny_new_decorator(a_function_to_decorate):

    # 在装饰器内部动态定义一个函数:wrapper(原意:包装纸).

    # 这个函数将被包装在原始函数的四周

    # 因此就可以在原始函数之前和之后执行一些代码.

    **def** the_wrapper_around_the_original_function():

        # 把想要在调用原始函数前运行的代码放这里

        print("Before the function runs")

        # 调用原始函数(需要带括号)

        a_function_to_decorate()

        # 把想要在调用原始函数后运行的代码放这里

        print("After the function runs")

    # 直到现在,"a_function_to_decorate"还没有执行过 (HAS NEVER BEEN EXECUTED).

    # 我们把刚刚创建的 wrapper 函数返回.

    # wrapper 函数包含了这个函数,还有一些需要提前后之后执行的代码,

    # 可以直接使用了(It's ready to use!)

    **return** the_wrapper_around_the_original_function

# Now imagine you create a function you don't want to ever touch again.

**def** a_stand_alone_function():

    print("I am a stand alone function, don't you dare modify me")

a_stand_alone_function()

# outputs: I am a stand alone function, don't you dare modify me

# 现在,你可以装饰一下来修改它的行为.

# 只要简单的把它传递给装饰器,后者能用任何你想要的代码动态的包装

# 而且返回一个可以直接使用的新函数:

a_stand_alone_function_decorated = my_shiny_new_decorator(a_stand_alone_function)

a_stand_alone_function_decorated()

# outputs:

# Before the function runs

# I am a stand alone function, don't you dare modify me

# After the function runs

装饰器的语法糖

我们用装饰器的语法来重写一下前面的例子:

# 一个装饰器是一个需要另一个函数作为参数的函数

**def** my_shiny_new_decorator(a_function_to_decorate):

    # 在装饰器内部动态定义一个函数:wrapper(原意:包装纸).

    # 这个函数将被包装在原始函数的四周

    # 因此就可以在原始函数之前和之后执行一些代码.

    **def** the_wrapper_around_the_original_function():

        # 把想要在调用原始函数前运行的代码放这里

        print("Before the function runs")

        # 调用原始函数(需要带括号)

        a_function_to_decorate()

        # 把想要在调用原始函数后运行的代码放这里

        print("After the function runs")

    # 直到现在,"a_function_to_decorate"还没有执行过 (HAS NEVER BEEN EXECUTED).

    # 我们把刚刚创建的 wrapper 函数返回.

    # wrapper 函数包含了这个函数,还有一些需要提前后之后执行的代码,

    # 可以直接使用了(It's ready to use!)

    **return** the_wrapper_around_the_original_function

@my_shiny_new_decorator

**def** another_stand_alone_function():

    print("Leave me alone")

another_stand_alone_function()

# outputs:

# Before the function runs

# Leave me alone

# After the function runs

是的,这就完了,就这么简单。@decorator 只是下面这条语句的简写(shortcut):

another_stand_alone_function = my_shiny_new_decorator(another_stand_alone_function)

装饰器语法糖其实就是装饰器模式的一个Python化的变体。为了方便开发,Python已经内置了好几种经典的设计模式,比如迭代器(iterators)。当然,你还可以堆积使用装饰器:

def bread(func):

    **def** wrapper():

        print("</''''''>")

        func()

        print("<______/>")

    **return** wrapper

**def** ingredients(func):

    **def** wrapper():

        print("#tomatoes#")

        func()

        print("~salad~")

    **return** wrapper

**def** sandwich(food="--ham--"):

    print(food)

sandwich()

# outputs: --ham--

sandwich = bread(ingredients(sandwich))

sandwich()

# outputs:

# </''''''>

# #tomatoes#

# --ham--

# ~salad~

# <______/>

用Python的装饰器语法表示:

def bread(func):

    **def** wrapper():

        print("</''''''>")

        func()

        print("<______/>")

    **return** wrapper

**def** ingredients(func):

    **def** wrapper():

        print("#tomatoes#")

        func()

        print("~salad~")

    **return** wrapper

@bread

@ingredients

**def** sandwich(food="--ham--"):

    print(food)

sandwich()

# outputs:

# </''''''>

# #tomatoes#

# --ham--

# ~salad~

# <______/>

装饰器放置的顺序也很重要:

def bread(func):

    **def** wrapper():

        print("</''''''>")

        func()

        print("<______/>")

    **return** wrapper

**def** ingredients(func):

    **def** wrapper():

        print("#tomatoes#")

        func()

        print("~salad~")

    **return** wrapper

@ingredients

@bread

**def** strange_sandwich(food="--ham--"):

    print(food)

strange_sandwich()

# outputs:

##tomatoes#

# </''''''>

# --ham--

# <______/>

# ~salad~

给装饰器函数传参

# 这不是什么黑色魔法(black magic),你只是必须让wrapper传递参数:

**def** a_decorator_passing_arguments(function_to_decorate):

    **def** a_wrapper_accepting_arguments(arg1, arg2):

        print("I got args! Look:", arg1, arg2)

        function_to_decorate(arg1, arg2)

    **return** a_wrapper_accepting_arguments

# 当你调用装饰器返回的函数式,你就在调用wrapper,而给wrapper的

# 参数传递将会让它把参数传递给要装饰的函数

@a_decorator_passing_arguments

**def** print_full_name(first_name, last_name):

    print("My name is", first_name, last_name)

print_full_name("Peter""Venkman")

# outputs:

# I got args! Look: Peter Venkman

# My name is Peter Venkman

含参数的装饰器

在上面的装饰器调用中,比如@decorator,该装饰器默认它后面的函数是唯一的参数。装饰器的语法允许我们调用decorator时,提供其它参数,比如@decorator(a)。这样,就为装饰器的编写和使用提供了更大的灵活性。

# a new wrapper layer

**def** pre_str(pre=''):

    # old decorator

    **def** decorator(F):

        **def** new_F(a, b):

            print(pre + " input", a, b)

            **return** F(a, b)

        **return** new_F

    **return** decorator

# get square sum

@pre_str('^_^')

**def** square_sum(a, b):

    **return** a ** 2 + b ** 2

# get square diff

@pre_str('T_T')

**def** square_diff(a, b):

    **return** a ** 2 - b ** 2

print(square_sum(3, 4))

print(square_diff(3, 4))

# outputs:

# ('^_^ input', 3, 4)

# 25

# ('T_T input', 3, 4)

# -7

上面的pre_str是允许参数的装饰器。它实际上是对原有装饰器的一个函数封装,并返回一个装饰器。我们可以将它理解为一个含有环境参量的闭包。当我们使用@pre_str(‘^_^’)调用的时候,Python能够发现这一层的封装,并把参数传递到装饰器的环境中。该调用相当于:

square_sum = pre_str('^_^') (square_sum)

装饰“类中的方法”

Python的一个伟大之处在于:方法和函数几乎是一样的(methods and functions are really the same),除了方法的第一个参数应该是当前对象的引用(也就是 self)。这也就意味着只要记住把 self 考虑在内,你就可以用同样的方法给方法创建装饰器:

def method_friendly_decorator(method_to_decorate):

    **def** wrapper(self, lie):

        lie = lie - 3  # very friendly, decrease age even more :-)

        **return** method_to_decorate(self, lie)

    **return** wrapper

**class** Lucy(object):

    **def** __init__(self):

        self.age = 32

    @method_friendly_decorator

    **def** say_your_age(self, lie):

        print("I am %s, what did you think?" % (self.age + lie))

l = Lucy()

l.say_your_age(-3)

# outputs: I am 26, what did you think?

当然,如果你想编写一个非常通用的装饰器,可以用来装饰任意函数和方法,你就可以无视具体参数了,直接使用 *args, **kwargs 就行:

def a_decorator_passing_arbitrary_arguments(function_to_decorate):

    # The wrapper accepts any arguments

    **def** a_wrapper_accepting_arbitrary_arguments(*args, **kwargs):

        print("Do I have args?:")

        print(args)

        print(kwargs)

        # Then you unpack the arguments, here *args, **kwargs

        # If you are not familiar with unpacking, check:

        # http://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/

        function_to_decorate(*args, **kwargs)

    **return** a_wrapper_accepting_arbitrary_arguments

@a_decorator_passing_arbitrary_arguments

**def** function_with_no_argument():

    print("Python is cool, no argument here.")

function_with_no_argument()

# outputs

# Do I have args?:

# ()

# {}

# Python is cool, no argument here.

@a_decorator_passing_arbitrary_arguments

**def** function_with_arguments(a, b, c):

    print(a, b, c)

function_with_arguments(1, 2, 3)

# outputs

# Do I have args?:

# (1, 2, 3)

# {}

# 1 2 3

@a_decorator_passing_arbitrary_arguments

**def** function_with_named_arguments(a, b, c, platypus="Why not ?"):

    print("Do %s, %s and %s like platypus? %s" % (a, b, c, platypus))

function_with_named_arguments("Bill""Linus""Steve", platypus="Indeed!")

# outputs

# Do I have args ? :

# ('Bill', 'Linus', 'Steve')

# {'platypus': 'Indeed!'}

# Do Bill, Linus and Steve like platypus? Indeed!

**class** Mary(object):

    **def** __init__(self):

        self.age = 31

    @a_decorator_passing_arbitrary_arguments

    **def** say_your_age(self, lie=-3):  # You can now add a default value

        print("I am %s, what did you think ?" % (self.age + lie))

m = Mary()

m.say_your_age()

# outputs

# Do I have args?:

# (<__main__.Mary object at 0xb7d303ac>,)

# {}

# I am 28, what did you think?

装饰类

在上面的例子中,装饰器接收一个函数,并返回一个函数,从而起到加工函数的效果。在Python 2.6以后,装饰器被拓展到类。一个装饰器可以接收一个类,并返回一个类,从而起到加工类的效果。

def decorator(aClass):

    **class** newClass:

        **def** __init__(self, age):

            self.total_display = 0

            self.wrapped = aClass(age)

        **def** display(self):

            self.total_display += 1

            print("total display", self.total_display)

            self.wrapped.display()

    **return** newClass

@decorator

**class** Bird:

    **def** __init__(self, age):

        self.age = age

    **def** display(self):

        print("My age is", self.age)

eagleLord = Bird(5)

**for** i **in** range(3):

    eagleLord.display()

在decorator中,我们返回了一个新类newClass。在新类中,我们记录了原来类生成的对象(self.wrapped),并附加了新的属性total_display,用于记录调用display的次数。我们也同时更改了display方法。通过修改,我们的Bird类可以显示调用display的次数了。

内置装饰器

Python中有三种我们经常会用到的装饰器, property、 staticmethod、 classmethod,他们有个共同点,都是作用于类方法之上。

property 装饰器

property 装饰器用于类中的函数,使得我们可以像访问属性一样来获取一个函数的返回值。

class XiaoMing:

    first_name = '明'

    last_name = '小'

    @property

    **def** full_name(self):

        **return** self.last_name + self.first_name

xiaoming = XiaoMing()

print(xiaoming.full_name)

例子中我们像获取属性一样获取 full_name 方法的返回值,这就是用 property 装饰器的意义,既能像属性一样获取值,又可以在获取值的时候做一些操作。

staticmethod 装饰器

staticmethod 装饰器同样是用于类中的方法,这表示这个方法将会是一个静态方法,意味着该方法可以直接被调用无需实例化,但同样意味着它没有 self 参数,也无法访问实例化后的对象。

class XiaoMing:

    @staticmethod

    **def** say_hello():

        print('同学你好')

XiaoMing.say_hello()

# 实例化调用也是同样的效果

# 有点多此一举

xiaoming = XiaoMing()

xiaoming.say_hello()

classmethod 装饰器

classmethod 依旧是用于类中的方法,这表示这个方法将会是一个类方法,意味着该方法可以直接被调用无需实例化,但同样意味着它没有 self 参数,也无法访问实例化后的对象。相对于 staticmethod 的区别在于它会接收一个指向类本身的 cls 参数。

class XiaoMing:

    name = '小明'

    @classmethod

    **def** say_hello(cls):

        print('同学你好, 我是' + cls.name)

        print(cls)

XiaoMing.say_hello()

wraps 装饰器

一个函数不止有他的执行语句,还有着 name(函数名),doc (说明文档)等属性,我们之前的例子会导致这些属性改变。

def decorator(func):

    **def** wrapper(*args, **kwargs):

        """doc of wrapper"""

        print('123')

        **return** func(*args, **kwargs)

    **return** wrapper

@decorator

**def** say_hello():

    """doc of say hello"""

    print('同学你好')

print(say_hello.__name__)

print(say_hello.__doc__)

由于装饰器返回了 wrapper 函数替换掉了之前的 say_hello 函数,导致函数名,帮助文档变成了 wrapper 函数的了。解决这一问题的办法是通过 functools 模块下的 wraps 装饰器。

from functools import wraps

**def** decorator(func):

    @wraps(func)

    **def** wrapper(*args, **kwargs):

        """doc of wrapper"""

        print('123')

        **return** func(*args, **kwargs)

    **return** wrapper

@decorator

**def** say_hello():

    """doc of say hello"""

    print('同学你好')

print(say_hello.__name__)

print(say_hello.__doc__)

装饰器总结

装饰器的核心作用是name binding。这种语法是Python多编程范式的又一个体现。大部分Python用户都不怎么需要定义装饰器,但有可能会使用装饰器。鉴于装饰器在Python项目中的广泛使用,了解这一语法是非常有益的。

常见错误:“装饰器”=“装饰器模式”

设计模式是一个在计算机世界里鼎鼎大名的词。假如你是一名 Java 程序员,而你一点设计模式都不懂,那么我打赌你找工作的面试过程一定会度过的相当艰难。

但写 Python 时,我们极少谈起“设计模式”。虽然 Python 也是一门支持面向对象的编程语言,但它的鸭子类型设计以及出色的动态特性决定了,大部分设计模式对我们来说并不是必需品。所以,很多 Python 程序员在工作很长一段时间后,可能并没有真正应用过几种设计模式。

不过装饰器模式(Decorator Pattern)是个例外。因为 Python 的“装饰器”和“装饰器模式”有着一模一样的名字,我不止一次听到有人把它们俩当成一回事,认为使用“装饰器”就是在实践“装饰器模式”。但事实上,它们是两个完全不同的东西。

“装饰器模式”是一个完全基于“面向对象”衍生出的编程手法。它拥有几个关键组成:一个统一的接口定义、若干个遵循该接口的类、类与类之间一层一层的包装。最终由它们共同形成一种“装饰”的效果。

而 Python 里的“装饰器”和“面向对象”没有任何直接联系,**它完全可以只是发生在函数和函数间的把戏。事实上,“装饰器”并没有提供某种无法替代的功能,它仅仅就是一颗“语法糖”而已。下面这段使用了装饰器的代码:

@log_time

@cache_result

**def** foo(): pass

基本完全等同于:

def foo(): pass

foo = log_time(cache_result(foo))

装饰器最大的功劳,在于让我们在某些特定场景时,可以写出更符合直觉、易于阅读的代码。它只是一颗“糖”,并不是某个面向对象领域的复杂编程模式。

参考链接:

  • Primer on Python Decorators
  • [Decorator Basics:Python’s functions are objects]

作者:钱魏Way

https://baidubiaodianfu.com/python-decorator.html