微软双拼输入法键位图手机26键位图大

君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
记忆微软拼音输入法键位的歌诀,微软双拼_1893year
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口经验1800 米
在线时间239 小时
积分 2271, 距离下一级还需 2729 积分
积分 2271, 距离下一级还需 2729 积分
机型小米手机2/2S
MIUI版本6.6.7
WI输入法&&微软双拼方案 全键盘时韵母ing怎么打,因为全键盘时没有;这个按键
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
经验3971 米
在线时间258 小时
版本7.9.14
积分 4336, 距离下一级还需 664 积分
积分 4336, 距离下一级还需 664 积分
机型红米Note4X 高通版
签到次数45
MIUI版本7.9.14
通过手机发布
一直用的小鹤双拼,不了解微软的
经验1800 米
在线时间239 小时
积分 2271, 距离下一级还需 2729 积分
积分 2271, 距离下一级还需 2729 积分
机型小米手机2/2S
MIUI版本6.6.7
一直用的小鹤双拼,不了解微软的
经验2450 米
在线时间327 小时
版本7.11.16
机型小米手机3/4 WCDMA版
签到次数27
MIUI版本7.11.16
通过手机发布
经验756 米
在线时间34 小时
版本6.7.14
积分 818, 距离下一级还需 1182 积分
积分 818, 距离下一级还需 1182 积分
机型小米手机2/2S
签到次数73
MIUI版本6.7.14
通过手机发布
用的小鹤双拼,微软不知
已关注微信
已关注极客秀微信
MIUI七夕鹊桥勋章
MIUI七周年
MIUI 9纪念勋章
小米众筹2周年
参加回帖活动
新版论坛APP
更新新版APP
关注新浪微博
已关注新浪微博
MIUI五周年
MIUI五周年纪念勋章
Copyright (C) 2017 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号&主题:双拼方案哪个好?双拼的“阿姨”怎么打?
泡网分: 1.37
帖子: 1625
注册: 2011年12月
这几天关于拼音和五笔的争论一直没有停止。全拼确实有不足之处,现在想尝试一下双拼,发现有好几个双拼方案,用过来说说哪个比较好。
今天下午列了几个常用词,尝试用各种不同方案的输入情况,列了个表,涉及7个双拼方案:
情况如下面图片。
碰到个情况,有好几个方案输入“ayi”时,并没有词语可选,不知道“阿姨”一词怎么打?这几个方案哪个用的比较多呢?那些键位需要记,怕挑了个冷门的学,用的人太少,不好了别人交流。
本帖最后由 jien217 于
20:53 编辑
微信扫一扫分享
&浏览:1384&&回帖:38 &&
泡网分: 20.846
帖子: 4100
注册: 2006年04月
fisherwei 发表于
把键盘布局打印个小卡片放显示器边上,打字的时候对着找键位,连续打字半天左右就学会了。...我现在打印了个小卡片夹手机背后了,9宫格打双拼更大挑战
本帖由 NX507J 客户端发布
泡网分: 30.22
帖子: 8697
注册: 2008年09月
用了十几年双拼了
泡网分: 16.025
帖子: 8704
注册: 2012年07月
到底选自然码还是小鹤我有点蒙
本帖由 Coolpad V1-C 客户端发布
泡网分: 16.54
精华: 1帖子: 8733
注册: 2002年03月
佣书自雄 发表于
用了双拼的人,绝不可能在用回全拼。
手机我装了搜狗,设置成双拼。我用了很多年双拼,但回到全拼10多年了。路过。
泡网分: 16.54
精华: 1帖子: 8733
注册: 2002年03月
黑白万把块 发表于
双拼武林主要分两大派系,四通派和自然码派,分别源于ucdos和ccdos两个不同系统,
最早的双拼按键方案是四通双拼,也就是中文之星双拼方案,也是现在拼音加加的方案,早期很普及
最早win3.0时代,微软是用的四通输入方案,后来微软推出win95时,还想用四通双拼方案,但是四通双拼方案的开发方向微软要很高的使用费用,于是微软转而使用自然码方案,四通派从此没落了,后来又出来个类似的拼音加加,才重有起色
当年用中文之星有个重要功能,就是可以一键将BIG5的乱码转成简体汉字,此功能的重要性当年混过凹凸文学馆的LLM都知道我用过四,五年的中文之星双拼。因为windows自带的双拼编码不同,所以后来又回到全拼了。
泡网分: 41.788
精华: 4帖子: 1436
注册: 2000年05月
我95年开始用自然码,一直用到现在快20年了,虽然自然码商业上早已停止开发了,还好有无数的爱好者,所以64位的自然码也容易找,而且有好几种风格的。习惯了以后,在没有自然码的电脑上敲字觉得简直就是折磨,因为我经常需要输入单字,而自然码的形旁辅助功能就极其有用。
手机上,只要装上百度输入法,就可以调到自然码模式,输入很爽,无论安桌还是苹果都可以,只是没有了形旁辅助。
我感觉,要写文章,还是这类拼音类的输入法好,据说不影响思维。
泡网分: 16.242
帖子: 1155
注册: 2007年06月
智能ABC双拼零声母是o键,就是oayi。据说自然码最科学,这个用习惯了就成条件反射了,很难再换了,我大学上计算机课的时候被老师诱导用了智能ABC双拼编码,紫光拼音时代U盘里还要一直放个编码的txt文件,好在现在搜狗拼音自带各种编码了。
泡网分: 1.741
帖子: 1725
注册: 2013年06月
fxmm 发表于
看下输入法自带的说明就好,简单,没什么特别资料。
用双拼比全拼快多了。可以一试。calmday 发表于
把双拼方案抄在一张纸上,把输入法改为双拼,开始用吧,不会就查,半小时适应,第二天可以把纸扔掉。
但先留着别扔,用手机的时候再查,手机看打没有手指记忆,需要再对照一下。jien217 发表于
不用啥学习资料,我昨天晚上才开始确定用小鹤,现在已经差不多不用看键盘布局了。弄了个图片开着,记不起来了就鼠标放任务栏预览一下。现在用双拼每分钟可以打30个字左右。双拼重码比较少,基本上前一两个词就是了,不用费脑力选词,省心多了。fisherwei 发表于
把键盘布局打印个小卡片放显示器边上,打字的时候对着找键位,连续打字半天左右就学会了。谢谢几位,我已经开始学打双拼了,这个回复就是用双拼打的,没习惯真的好慢啊! 本帖最后由 比利學攝影 于
10:25 编辑
泡网分: 1.37
帖子: 1625
注册: 2011年12月
比利学摄影 发表于
被你们说得我都想去学双拼了,不知有啥学习资料推荐?不用啥学习资料,我昨天晚上才开始确定用小鹤,现在已经差不多不用看键盘布局了。弄了个图片开着,记不起来了就鼠标放任务栏预览一下。现在用双拼每分钟可以打30个字左右。双拼重码比较少,基本上前一两个词就是了,不用费脑力选词,省心多了。
泡网分: 5.197
帖子: 2971
注册: 2010年06月
双拼武林主要分两大派系,四通派和自然码派,分别源于ucdos和ccdos两个不同系统,
最早的双拼按键方案是四通双拼,也就是中文之星双拼方案,也是现在拼音加加的方案,早期很普及
最早win3.0时代,微软是用的四通输入方案,后来微软推出win95时,还想用四通双拼方案,但是四通双拼方案的开发方向微软要很高的使用费用,于是微软转而使用自然码方案,四通派从此没落了,后来又出来个类似的拼音加加,才重有起色
当年用中文之星有个重要功能,就是可以一键将BIG5的乱码转成简体汉字,此功能的重要性当年混过凹凸文学馆的LLM都知道
本帖最后由 黑白万把块 于
10:24 编辑
泡网分: 10.3
帖子: 8715
注册: 2012年02月
比利学摄影 发表于
被你们说得我都想去学双拼了,不知有啥学习资料推荐?把键盘布局打印个小卡片放显示器边上,打字的时候对着找键位,连续打字半天左右就学会了。
泡网分: 10.3
帖子: 8715
注册: 2012年02月
我只会用微软的:oa yi
泡网分: 35.775
帖子: 10713
注册: 2005年05月
韦板凳 发表于
我觉得这几个布局方案没本质区别,用惯了都好,快了也都有写手指打架的情况。
好比欧洲各国打字机的键盘布局一样。不过是一个卖点吆喝罢了。根本就是天时地利人和的问题。
如果你初上手双拼,没有特殊情怀,我建议还是微软方案好。
理由:普及啊。我认真用了一年微软才改的小鹤,我觉得新学双拼的人没必要再自己体验一次,虽然改方案没啥难度。
打架不会,就是微软方案容易按错,让人火大。
除了微软自家输入法,其它常见输入法都支持小鹤,必应输入法不适合创造性文字工作,目前新出的手心输入法各方面都完爆它。 本帖最后由 calmday 于
09:29 编辑
泡网分: 9.491
帖子: 2035
注册: 2009年08月
比利学摄影 发表于
被你们说得我都想去学双拼了,不知有啥学习资料推荐?看下输入法自带的说明就好,简单,没什么特别资料。
用双拼比全拼快多了。可以一试。
泡网分: 35.775
帖子: 10713
注册: 2005年05月
比利学摄影 发表于
被你们说得我都想去学双拼了,不知有啥学习资料推荐?把双拼方案抄在一张纸上,把输入法改为双拼,开始用吧,不会就查,半小时适应,第二天可以把纸扔掉。
但先留着别扔,用手机的时候再查,手机看打没有手指记忆,需要再对照一下。
泡网分: 20.846
帖子: 4100
注册: 2006年04月
被你们说得我都想去学双拼了,不知有啥学习资料推荐?
本帖由 NX507J 客户端发布
泡网分: 16.025
帖子: 8704
注册: 2012年07月
看来都推荐小鹤啊
本帖由 Coolpad V1-C 客户端发布
泡网分: 18.325
帖子: 3007
注册: 2007年06月
我觉得这几个布局方案没本质区别,用惯了都好,快了也都有写手指打架的情况。
好比欧洲各国打字机的键盘布局一样。不过是一个卖点吆喝罢了。根本就是天时地利人和的问题。
如果你初上手双拼,没有特殊情怀,我建议还是微软方案好。
理由:普及啊。
泡网分: 9.491
帖子: 2035
注册: 2009年08月
拼音加加到5.3后就没再更新了, 因为搜狗,百度,腾讯等都开始做输入法了,拼音加加的优势全被模仿走了.现在已经没有任何优势.
电脑上现在用的百度的双拼,&&手机上开始用的是qq的双拼,&&后来讯飞出了双拼就改用讯飞了
讯飞双拼 还可以语音 还可以直接键盘区手写,&&实在太方便了
泡网分: 9.491
帖子: 2035
注册: 2009年08月
输入法很多 先进的方法都是 拼音加加发明的,
比如shift 选字, 逗号句号翻页等,还有笔画输入, 回车直接输入英文等.
当时2000年左右用了拼音加加,速度极大提高.
所以一直用的是拼音加加的双拼,
可惜后来这些功能都被别人学会了.
泡网分: 39.136
帖子: 3223
注册: 2001年11月
每天都用小鹤的方案,习惯了。
泡网分: 11.422
帖子: 1199
注册: 2008年04月
本帖由安卓客户端发布
泡网分: 35.775
帖子: 10713
注册: 2005年05月
香烟和火柴 发表于
如果手机用双拼,你觉得怎么样。手机用双拼效果没得说,可以用触宝,双拼+笔画筛选
60字是基本,到100字每分 难度不大
当然不要用真键盘手机,5寸触屏竖着用足够了 本帖最后由 calmday 于
23:34 编辑
泡网分: 35.775
帖子: 10713
注册: 2005年05月
佣书自雄 发表于
现在对输入法的唯一要求,就是能设置成双拼,能双拼的就适合我。要求太低了,至少要方便修改,比如必应输入法就业余的反人类。
比如打色影无鸡, 出来色影无忌后 要一点点确认,没法直接改最后一个字(正常输入法方向键按一下就能改了),多少个版本出来的没改进,开发输入法的不专业也不听意见。
泡网分: 26.572
帖子: 2410
注册: 2003年12月
现在对输入法的唯一要求,就是能设置成双拼,能双拼的就适合我。
泡网分: 26.572
帖子: 2410
注册: 2003年12月
香烟和火柴 发表于
如果手机用双拼,你觉得怎么样。用了双拼的人,绝不可能在用回全拼。
手机我装了搜狗,设置成双拼。
泡网分: 16.025
帖子: 8704
注册: 2012年07月
佣书自雄 发表于
最早用自然码,后来为了方便换成微软双拼了。
oayi就能打出阿姨。...如果手机用双拼,你觉得怎么样。
本帖由 Coolpad V1-C 客户端发布
泡网分: 26.572
帖子: 2410
注册: 2003年12月
最早用自然码,后来为了方便换成微软双拼了。
oayi就能打出阿姨。
泡网分: 90.231
精华: 1帖子: 37058
注册: 2005年01月
1995年开始使用双拼双音录入中文,当时刚上初二。
当时的方案叫“中文之星”,键盘方案同现在的“拼音加加”。
阿姨:aayi
泡网分: 1.37
帖子: 1625
注册: 2011年12月
calmday 发表于
还可以试试新出的手心,打字也很顺,编辑功能强。
每次新版都加点功能,有一定潜力。
已经在用搜狗开始练习了,等我上手了我试试。
&版权所有:&&&&新浪广告共享计划>
广告共享计划
微软双拼键盘对照和助记口诀&|&微软拼音输入法
  ,多年过去,有数千人次关注,说明对某些朋友有需要与帮助。现在转发在本人的博客中,以便帮助更多的初学者。
棉球鞋,更松软,池航、应淑芬,靠您来追贼
  荞麦如是说:使用输入法,那都是萝卜白菜,各有所爱。五笔是快,相对而言,毕竟只是极少数人使用的东西,绝大多数电脑使用者,使用的都是拼音。常用的拼音输入法也有很多种,就看自己喜好了。本人在dos时代,一直使用自然码双拼输入法,到windows时代以后,就一直使用微软拼音双拼输入法。这两种拼音的双拼规则,大同小异,后者应该是借鉴的前者吧。使用微软拼音的双拼句子输入的方式,其实也就够快了,毕竟不是专业打字员,没必要过分强调速度的。就像很多人都使用的智能拼音一样,那还是全拼,人家照样够用。
  双拼:每个汉字用两个字母来代替输入。比如“用”,全拼为:Yong,就用前面的声母Y与后面的韵母ong的替代字母S两个字母输入:YS
  一、双拼输入键位表
图1 微软双拼默认的键盘对照
  二、助记口诀
  小写字母部分,双拼输入就用对应的大写字母代替
  1、声、韵母在同一个键上,可构成音节(可把ing设置在Y键上,自然码规则)
&  口诀:棉球鞋,更松软,池航、应淑芬,靠您来追贼
图2 双拼助记口诀
  输入举例:面(Mian):MM;连(Lian):LM;棉鞋(Mian
Xie):MMXX;电脑(Dian Nao):DMNK。
  2、声、韵母在同一个键上,不能构成音节
  口诀:批文批云:北欧以外,私用日元急案,从此要特约。呜哇乌鸦,哦我喂鱼,大王得羊
批(P)文(un)批(P)云(&n):北(B)欧(ou)以(Y)外(uai),私(S)用(iong)日(R)元(&an)急(J)案(an),从此(C)要(iao)特(T)约(&e)。呜(W)哇(ua)乌(W)鸦(ia),哦(O)我(uo)喂(V)鱼(&),大(D)王(uang)得(D)羊(iang)
  上述对应的规则就是:P-un,&n;B-ou;Y-uai;S-iong;R-&an;D-uang,iang
  输入举例:云(Yun):YP;楼(Lou):LB;窘(Jiong):JS;梁(Liang):LD
  3、零声母的处理
  没声母的为零声母,使用字母代替声母,比如:爱:就输入;安AN:OJ
  三、简述句子输入
  微软拼音支持句子输入,我们直接输入句子,少量不正确的地方,可以使用左、右光标键来修正。
  句子输入举例:我们来学习微软双拼句子输入法,其实就是一直输入,最后来修正与回车确认即可。
  直接输入:WOMFLLXTXIWZRRUDPNJUZIUURUFA,QIUIJQUIYIVIUURU,ZVHBLLXQVGYUHVIEQTRFJIKE。
  为方便看出每个汉字对应的双拼输入字母,空格处理如下:
  WO MF LL XT XI WZ RR UD PN JU ZI UU RU FA,QI UI JQ UI YI VI UU RU,ZV HB LL XQ VG YU HV IE
QT RF JI KE。
  四、最后说说双拼方案的选择与设置
  以微软拼音2007为例,其他版本大同小异:
&图3 在微软拼音状态栏上,打开功能菜单的“输入选项”,就打开了上图,然后点选“双拼”
图4 点开“微软拼音新体验与经典输入风格”,可进行有关设置,并可看到“双拼方案”按钮
图5 在“双拼方案”中,可修改或者自定义双拼方案
勾选“允许韵母重复定义”以后再来设置:比如把韵母ing定义在Y键上;(遇)定义在V键上
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。双拼入门教程a year ago那么上面一段话,总结起来就是:一个声母开头一个韵母结尾组合起来成为一个完整的拼音音节,一个完整的拼音音节确定一组汉字。那么,再回到上面的例子,我们将声母 x和 韵母 iang 分别绑定到键盘的两个按键上,只需要敲击这两个按键,即可组成xiang这个拼音音节。这也就是为什么,我们称这种敲击两个按键确定一组备选汉字的输入法叫双拼的原因。入门了解了双拼的本质是敲击两个按键确定汉字之后,我们就要问了:标准普通话的汉语拼音里,声母23个,韵母39个,一个声母/韵母对应一个按键的话,如此多的音,怎么才能在常规键盘上为他们安排对应的键呢?难道要使用数字区?F区?当然是不现实的。所以这里需要引入一个 状态 的概念。什么是所谓的状态呢?根据上面的入门,我们知道,一个完整的拼音音节由 一个声母开头一个韵母结尾 组成,除此之外的组合均不能组成一个完整的拼音音节。所以,当我们没有输入时,输入法的状态是 期望一个声母的输入,而敲入一个声母时,输入法的状态变为 期望一个韵母的输入,所以,双拼的解决方案是将声母和韵母层叠的绑定到字母区,因为他们输入状态不同,不会相互影响。
那么细心的朋友又会问了,声母23个可以绑定到字母区没错,但韵母有39个(在实际的使用中没有这么多,39个韵母的说法来自汉语拼音标准中包含最全面的
标准),如何将39个韵母绑定道26个按键的字母区呢?这里涉及到比较深入的汉语拼音组成的研究,在此不做详细解释,直接给出结论。这个问题的答案是:将
相似但使用情况互斥的韵母绑定到同一个按键。具体怎么操作,我们马上来看。上手啰嗦这么久,终于要进入正题了。既然我们要输入双拼,那么自然需要选择一个支持双拼输入的输入法。这里我们选择百度输入法(这里仅以其作为演示工具,不就百度公司本身做任何发散),安装完成后是不是就可以开始了呢?不,还有一个微小的问题需要注意:键位方案。什么是键位方案?什么是键位方案呢?我们每个人的习惯可能是不同的,你喜欢abc对应abc,我喜欢abc对应bcd,凯撒喜欢abc对应tuv。那么我们自然需要一套统一的规则。这就是所谓的键位方案。那么键位方案是怎样的呢?在双拼发展的过程中,因声母韵母分别绑定,不同的用户习惯不太一样,加之双拼输入法多提供了用户自定义按键方案的原因,出现了不止一套广为接受的键位方案。历史久远形成大多数约定的如自然码方案、小鹤双拼方案,也有输入法制造商提供的自家方案如微软双拼方案、搜狗双拼方案等。那么选择哪一套好呢?最好的方法当然是都试一遍,选自己觉得顺手的。但是这样太耗费时间精力。那么我们需要一套筛选标准。我个人在选用工具时的标准是:方便获取,通用性高,用户量大。落实到双拼方案上,我的选择是自然码方案。原因如下:历史悠久几乎所有双拼输入法都默认支持只要有双拼输入法的系统和设备都默认包含用户量大所有按键绑定均在字母区完成(某些方案会使用到标点符号区)所以我也建议大家可以优先考虑自然码方案。终于要开始了在消磨完耐心前,我们终于要开始了。首先我们找到自然码方案所对应的按键绑定表,如下:其中,蓝色字母表示声母,红色字母表示韵母,我们试着输入几个字。比如:你好,世界!我们先通过全拼将其拆分:ni hao shi jie。然后我们依次查看每个字的声母和韵母,比如第一个字你-ni,这个字因为拼音只有两个字母,与全拼并无区别,所以我们继续看下一个字好-hao,这个字的拼音出现了三个字母,声母为 h,韵母为 ao,那么我们先在上图找到声母蓝色的 h,敲击键盘对应的按键 h;接下来在上图找到韵母红色的ao,可以看到它绑定在按键 k上,所以敲击按键 k,此时你会看到输入法的汉字备选框里出现了拼音音节为hao的备选字,找一下,敲出好字。接下来是一个翘舌音的汉字世-shi,对于常规声母只有一个字母,我们很容易的想到直接绑定在对应字母上就好了,但是遇到翘舌音声母 sh这样特殊的呢?根据之前介绍的状态可知,在默认状态下,整个字母键区的输入都会被输入法识别为声母输入,所以我们完全可以找到几个不对应单字母声母的按键,将双字母声母绑定在其上。所以,回到键位图,可以看到,蓝色的 sh被绑定在了按键 u,如实,敲击它,再敲击韵母 i所对应的按键 i,即可得到拼音音节shi所对应的备选汉字组了。最后,我们输入界-jie,界字的声母很简单,不再赘述,那么它的韵母 ie,非单字母韵母,在那里呢?查图可知,韵母 ie被绑定在了按键 x上,敲击它,从备选列表里找到界字吧。刚刚已经体验了一下双拼输入,是不是有种奇妙的感觉?练习就留给各位之后再做,我们回到图上,可以看到按键 w r y o s d v与众不同,均被绑定了两个韵母,这就是之前我们说到的相似但使用情况互斥的韵母绑定到同一个按键的情况。好了,读到这里,双拼入门就完成了,还望各位小伙伴沉下心来,多看键位图,多加练习,短则半日多则两天,一定可以熟练掌握双拼输入法的。不用刻意去背键位图,唯手熟尔。祝各位好运!最后的最后:手机上也有双拼输入法哦,但是最好就用全键盘输入,这样键位方案与电脑上是一样的,否则只能很蛋疼的再学一遍。赞赏1 人赞赏165收藏分享举报文章被以下专栏收录选填就是不填的意思推荐阅读{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&isPending&:false,&contributes&:[{&sourceColumn&:{&lastUpdated&:,&description&:&选填就是不填的意思&,&permission&:&COLUMN_PRIVATE&,&memberId&:16666,&contributePermission&:&COLUMN_PUBLIC&,&translatedCommentPermission&:&all&,&canManage&:true,&intro&:&选填就是不填的意思&,&urlToken&:&whatever&,&id&:4575,&imagePath&:&v2-a61df542e6b765c1d23ea702ec60ca4c.jpg&,&slug&:&whatever&,&applyReason&:&&,&name&:&名字什么的随便啊&,&title&:&名字什么的随便啊&,&url&:&https:\u002F\\u002Fwhatever&,&commentPermission&:&COLUMN_ALL_CAN_COMMENT&,&canPost&:true,&created&:,&state&:&COLUMN_NORMAL&,&followers&:195,&avatar&:{&id&:&v2-a61df542e6b765c1d23ea702ec60ca4c&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&activateAuthorRequested&:false,&following&:false,&imageUrl&:&https:\u002F\\u002Fv2-a61df542e6b765c1d23ea702ec60ca4c_l.jpg&,&articlesCount&:7},&state&:&accepted&,&targetPost&:{&titleImage&:&https:\u002F\\u002F1e7dabdd97b1082bef1128ccdeb9cdca_r.jpg&,&lastUpdated&:,&imagePath&:&1e7dabdd97b1082bef1128ccdeb9cdca.jpg&,&permission&:&ARTICLE_PUBLIC&,&topics&:[],&summary&:&2016年过半,到目前为止,我个人认为习得的\u003Cb\u003E最值得推荐的技能之一\u003C\u002Fb\u003E就是双拼,奈何向周围的朋友推荐却普遍反映根本看不懂网上的教学说明。所以记录此文,将我浅薄的学习双拼的经验分享给大家。历史一开始我们还是先了解一下双拼本身。目前常见的汉字输入系统主…&,&copyPermission&:&ARTICLE_COPYABLE&,&translatedCommentPermission&:&all&,&likes&:0,&origAuthorId&:0,&publishedTime&:&T00:55:57+08:00&,&sourceUrl&:&&,&urlToken&:,&id&:1016266,&withContent&:false,&slug&:,&bigTitleImage&:false,&title&:&双拼入门教程&,&url&:&\u002Fp\u002F&,&commentPermission&:&ARTICLE_ALL_CAN_COMMENT&,&snapshotUrl&:&&,&created&:,&comments&:0,&columnId&:4575,&content&:&&,&parentId&:0,&state&:&ARTICLE_PUBLISHED&,&imageUrl&:&https:\u002F\\u002F1e7dabdd97b1082bef1128ccdeb9cdca_r.jpg&,&author&:{&bio&:&&,&isFollowing&:false,&hash&:&d&,&uid&:64,&isOrg&:false,&slug&:&MOOWOO&,&isFollowed&:false,&description&:&&,&name&:&MOOWOO&,&profileUrl&:&https:\u002F\\u002Fpeople\u002FMOOWOO&,&avatar&:{&id&:&f827af522&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&memberId&:16666,&excerptTitle&:&&,&voteType&:&ARTICLE_VOTE_CLEAR&},&id&:415296}],&title&:&双拼入门教程&,&author&:&MOOWOO&,&content&:&\u003Cp\u003E 2016年过半,到目前为止,我个人认为习得的\u003Cb\u003E最值得推荐的技能之一\u003C\u002Fb\u003E就是双拼,奈何向周围的朋友推荐却普遍反映根本看不懂网上的教学说明。所以记录此文,将我浅薄的学习双拼的经验分享给大家。\u003C\u002Fp\u003E\u003Ch2\u003E历史\u003C\u002Fh2\u003E\u003Cp\u003E一开始我们还是先了解一下双拼本身。目前常见的汉字输入系统主要有\u003Cu\u003E全拼\u003C\u002Fu\u003E、\u003Cu\u003E五笔\u003C\u002Fu\u003E和\u003Cu\u003E双拼\u003C\u002Fu\u003E。\n全拼因其简单直接所以使用人群最广,五笔因早推广和其定位生僻字的能力积累了大批拥趸。而双拼自发明之日起就感觉不温不火,始终流传于小圈子内。许多新手\n接触后觉得双拼似乎包含了全拼和五笔的缺点,既要记键位,又得会拼音,唯一被粉丝们夸耀的好像也只有极高的输入效率。但上手如此困难,哪有效率可言呢?\u003C\u002Fp\u003E\u003Cp\u003E的确,“过高”的入门门槛似乎让双拼成为如同鸡肋一般的存在,但我以自己的亲身经历保证,双拼绝不是大家想象的这般无用。一起问题,都源于双拼没有一个很好的入门教程。今天我就来搞个新闻,做一点微小的贡献。\u003C\u002Fp\u003E\u003Ch2\u003E简介\u003C\u002Fh2\u003E\u003Cp\u003E首先,让我们来回顾一下汉语的音节系统——拼音。我们知道,\u003Cb\u003E拼音分为\u003Cu\u003E声母\u003C\u002Fu\u003E和\u003Cu\u003E韵母\u003C\u002Fu\u003E,一个声母开头一个韵母结尾组合起来成为一个完整的\u003Cu\u003E拼音音节\u003C\u002Fu\u003E\u003C\u002Fb\u003E(这里的讨论背景是计算机中的汉语输入,所以我们不谈音调的问题),所有的汉字都有其对应的拼音音节(多音字则是一个汉字对应多个不同的拼音音节),换句话说,\u003Cb\u003E一个完整的拼音音节就可以定位对应一组汉字\u003C\u002Fb\u003E。比如:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E声母 x + 韵母 iang = xiang -& 像、想、向、相、香.....\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E那么上面一段话,总结起来就是:一个声母开头一个韵母结尾组合起来成为一个完整的拼音音节,一个完整的拼音音节确定一组汉字。那么,再回到上面的例子,我们将\u003Cu\u003E声母 x\u003C\u002Fu\u003E和 \u003Cu\u003E韵母 iang\u003C\u002Fu\u003E 分别绑定到键盘的两个按键上,只需要敲击这两个按键,即可组成xiang这个拼音音节。这也就是为什么,我们称这种\u003Cb\u003E\u003Cu\u003E敲击两个按键确定一组备选汉字\u003C\u002Fu\u003E的输入法叫双拼\u003C\u002Fb\u003E的原因。\u003C\u002Fp\u003E\u003Ch2\u003E入门\u003C\u002Fh2\u003E\u003Cp\u003E了解了双拼的本质是\u003Cu\u003E敲击两个按键确定汉字\u003C\u002Fu\u003E之后,我们就要问了:标准普通话的汉语拼音里,声母23个,韵母39个,一个声母\u002F韵母对应一个按键的话,如此多的音,怎么才能在常规键盘上为他们安排对应的键呢?难道要使用数字区?F区?当然是不现实的。\u003Cb\u003E所以这里需要引入一个 \u003Cu\u003E状态\u003C\u002Fu\u003E 的概念\u003C\u002Fb\u003E。什么是所谓的状态呢?根据上面的入门,我们知道,一个完整的拼音音节由 \u003Cu\u003E一个声母开头一个韵母结尾\u003C\u002Fu\u003E 组成,除此之外的组合均不能组成一个完整的拼音音节。所以,当我们没有输入时,输入法的状态是 \u003Cu\u003E期望一个声母的输入\u003C\u002Fu\u003E,而敲入一个声母时,输入法的状态变为 \u003Cu\u003E期望一个韵母的输入\u003C\u002Fu\u003E,所以,\u003Cb\u003E双拼的解决方案是将声母和韵母\u003Cu\u003E层叠的绑定到\u003C\u002Fu\u003E字母区,因为他们输入状态不同,不会相互影响\u003C\u002Fb\u003E。\n那么细心的朋友又会问了,声母23个可以绑定到字母区没错,但韵母有39个(在实际的使用中没有这么多,39个韵母的说法来自汉语拼音标准中包含最全面的\n标准),如何将39个韵母绑定道26个按键的字母区呢?这里涉及到比较深入的汉语拼音组成的研究,在此不做详细解释,直接给出结论。这个问题的答案是:将\n相似但使用情况互斥的韵母绑定到同一个按键。具体怎么操作,我们马上来看。\u003C\u002Fp\u003E\u003Ch2\u003E上手\u003C\u002Fh2\u003E\u003Cp\u003E啰嗦这么久,终于要进入正题了。既然我们要输入双拼,那么自然需要选择一个支持双拼输入的输入法。这里我们选择百度输入法(这里仅以其作为演示工具,不就百度公司本身做任何发散),安装完成后是不是就可以开始了呢?不,还有一个微小的问题需要注意:键位方案。\u003C\u002Fp\u003E\u003Ch3\u003E什么是键位方案?\u003C\u002Fh3\u003E\u003Cp\u003E什么是键位方案呢?我们每个人的习惯可能是不同的,你喜欢abc对应abc,我喜欢abc对应bcd,凯撒喜欢abc对应tuv。那么我们自然\u003Cb\u003E需要一套统一的规则。这就是所谓的键位方案。\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Ch2\u003E那么键位方案是怎样的呢?\u003C\u002Fh2\u003E\u003Cp\u003E在双拼发展的过程中,因声母韵母分别绑定,不同的用户习惯不太一样,加之双拼输入法多提供了用户自定义按键方案的原因,出现了不止一套广为接受的键位方案。历史久远形成大多数约定的如自然码方案、小鹤双拼方案,也有输入法制造商提供的自家方案如微软双拼方案、搜狗双拼方案等。那么选择哪一套好呢?最好的方法当然是都试一遍,选自己觉得顺手的。但是这样太耗费时间精力。\u003Cb\u003E那么我们需要一套筛选标准\u003C\u002Fb\u003E。我个人在选用工具时的标准是:方便获取,通用性高,用户量大。落实到双拼方案上,我的选择是自然码方案。原因如下:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E历史悠久\u003C\u002Fli\u003E\u003Cli\u003E几乎所有双拼输入法都默认支持\u003C\u002Fli\u003E\u003Cli\u003E只要有双拼输入法的系统和设备都默认包含\u003C\u002Fli\u003E\u003Cli\u003E用户量大\u003C\u002Fli\u003E\u003Cli\u003E所有按键绑定均在字母区完成(某些方案会使用到标点符号区)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E所以我也\u003Cb\u003E建议大家可以优先考虑自然码方案\u003C\u002Fb\u003E。\u003C\u002Fp\u003E\u003Ch3\u003E终于要开始了\u003C\u002Fh3\u003E\u003Cp\u003E在消磨完耐心前,我们终于要开始了。首先我们找到自然码方案所对应的按键绑定表,如下:\u003C\u002Fp\u003E\u003Cnoscript\u003E\u003Cimg data-rawheight=\&223\& data-rawwidth=\&428\& src=\&https:\u002F\\u002Ffcbf1a944c3d59_b.jpg\& class=\&origin_image zh-lightbox-thumb\& width=\&428\& data-original=\&https:\u002F\\u002Ffcbf1a944c3d59_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg data-rawheight=\&223\& data-rawwidth=\&428\& src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='428'%20height='223'&&\u002Fsvg&\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&428\& data-original=\&https:\u002F\\u002Ffcbf1a944c3d59_r.jpg\& data-actualsrc=\&https:\u002F\\u002Ffcbf1a944c3d59_b.jpg\&\u003E\u003Cp\u003E其中,\u003Cb\u003E蓝色字母表示声母,红色字母表示韵母\u003C\u002Fb\u003E,我们试着输入几个字。比如:你好,世界!\u003C\u002Fp\u003E\u003Cp\u003E我们先通过全拼将其拆分:ni hao shi jie。然后我们依次查看每个字的声母和韵母,比如第一个字\u003Cu\u003E你-ni\u003C\u002Fu\u003E,这个字因为拼音只有两个字母,与全拼并无区别,所以我们继续看下一个字\u003Cu\u003E好-hao\u003C\u002Fu\u003E,这个字的拼音出现了三个字母,\u003Cu\u003E声母为 h,韵母为 ao\u003C\u002Fu\u003E,那么我们先在上图找到声母\u003Cu\u003E蓝色的 h\u003C\u002Fu\u003E,敲击键盘对应的\u003Cu\u003E按键 h\u003C\u002Fu\u003E;接下来在上图找到韵母\u003Cu\u003E红色的ao\u003C\u002Fu\u003E,可以看到它绑定在\u003Cu\u003E按键 k\u003C\u002Fu\u003E上,所以敲击按键 k,此时你会看到输入法的汉字备选框里出现了\u003Cu\u003E拼音音节为hao的备选字\u003C\u002Fu\u003E,找一下,敲出好字。接下来是一个翘舌音的汉字\u003Cu\u003E世-shi\u003C\u002Fu\u003E,对于常规声母只有一个字母,我们很容易的想到直接绑定在对应字母上就好了,但是遇到\u003Cu\u003E翘舌音声母 sh\u003C\u002Fu\u003E这样特殊的呢?根据之前介绍的状态可知,\u003Cb\u003E在默认状态下,整个字母键区的输入\u003Cu\u003E都会被输入法识别为声母输入\u003C\u002Fu\u003E\u003C\u002Fb\u003E,所以我们完全可以\u003Cb\u003E找到几个不对应单字母声母的按键,将双字母声母绑定在其上\u003C\u002Fb\u003E。所以,回到键位图,可以看到,\u003Cu\u003E蓝色的 sh\u003C\u002Fu\u003E被绑定在了\u003Cu\u003E按键 u\u003C\u002Fu\u003E,如实,敲击它,再敲击\u003Cu\u003E韵母 i\u003C\u002Fu\u003E所对应的\u003Cu\u003E按键 i\u003C\u002Fu\u003E,即可得到\u003Cu\u003E拼音音节shi所对应的备选汉字组\u003C\u002Fu\u003E了。最后,我们输入\u003Cu\u003E界-jie\u003C\u002Fu\u003E,界字的声母很简单,不再赘述,那么它的\u003Cu\u003E韵母 ie\u003C\u002Fu\u003E,非单字母韵母,在那里呢?查图可知,\u003Cu\u003E韵母 ie\u003C\u002Fu\u003E被绑定在了\u003Cu\u003E按键 x\u003C\u002Fu\u003E上,敲击它,从备选列表里找到界字吧。\u003C\u002Fp\u003E\u003Cp\u003E刚刚已经体验了一下双拼输入,是不是有种奇妙的感觉?练习就留给各位之后再做,我们回到图上,可以看到\u003Cu\u003E按键 w r y o s d v\u003C\u002Fu\u003E与众不同,均被绑定了\u003Cu\u003E两个韵母\u003C\u002Fu\u003E,这就是之前我们说到的\u003Cu\u003E相似但使用情况互斥的韵母绑定到同一个按键\u003C\u002Fu\u003E的情况。\u003C\u002Fp\u003E\u003Cp\u003E好了,读到这里,双拼入门就完成了,还望各位小伙伴沉下心来,多看键位图,多加练习,短则半日多则两天,一定可以熟练掌握双拼输入法的。\u003Cb\u003E不用刻意去背键位图,唯手熟尔\u003C\u002Fb\u003E。祝各位好运!\u003C\u002Fp\u003E\u003Cp\u003E最后的最后:手机上也有双拼输入法哦,但是\u003Cb\u003E最好就用全键盘输入,这样键位方案与电脑上是一样的\u003C\u002Fb\u003E,否则只能很蛋疼的再学一遍。\u003C\u002Fp\u003E&,&updated&:new Date(&T16:55:57.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:44,&collapsedCount&:0,&likeCount&:165,&state&:&published&,&isLiked&:false,&slug&:&&,&lastestTipjarors&:[{&isFollowed&:false,&name&:&于百万&,&headline&:&&,&avatarUrl&:&https:\u002F\\u002F50\u002Ffeb4fccda2d5f8_s.jpg&,&isFollowing&:false,&type&:&people&,&slug&:&yu-bai-wan-19&,&bio&:&电气工程师&,&hash&:&ed0ff0ffb37da635cbdd0&,&uid&:379260,&isOrg&:false,&description&:&&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fyu-bai-wan-19&,&avatar&:{&id&:&feb4fccda2d5f8&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}],&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&https:\u002F\\u002F1e7dabdd97b1082bef1128ccdeb9cdca_r.jpg&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&reviewers&:[],&topics&:[{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&双拼输入法&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&入门指南&}],&adminClosedComment&:false,&titleImageSize&:{&width&:1216,&height&:660},&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&column&:{&slug&:&whatever&,&name&:&名字什么的随便啊&},&tipjarState&:&activated&,&tipjarTagLine&:&谢谢谁谁谁送的什么什么什么~(傅园慧脸&,&sourceUrl&:&&,&pageCommentsCount&:44,&tipjarorCount&:1,&annotationAction&:[],&hasPublishingDraft&:false,&snapshotUrl&:&&,&publishedTime&:&T00:55:57+08:00&,&url&:&\u002Fp\u002F&,&lastestLikers&:[{&bio&:&&,&isFollowing&:false,&hash&:&ec8d152ed5&,&uid&:395600,&isOrg&:false,&slug&:&qing-shang-di-67&,&isFollowed&:false,&description&:&&,&name&:&磬殇邸&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fqing-shang-di-67&,&avatar&:{&id&:&b47c585fbff8&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&收藏的同时,点个攒呗&,&isFollowing&:false,&hash&:&67ffaffebfb463&,&uid&:102100,&isOrg&:false,&slug&:&xin-yang-72-5-46&,&isFollowed&:false,&description&:&&,&name&:&新阳&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fxin-yang-72-5-46&,&avatar&:{&id&:&v2-62d76058aeb8df122a91ada6bc8e2050&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&&,&isFollowing&:false,&hash&:&8e8eda4d6bbb6a59706f&,&uid&:08,&isOrg&:false,&slug&:&shi-jun-jun-93&,&isFollowed&:false,&description&:&&,&name&:&石君君&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fshi-jun-jun-93&,&avatar&:{&id&:&v2-aa00abd1c85d&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&探索未知的我&,&isFollowing&:false,&hash&:&a1f22a4e211d155c7cf38d2f5f5676f9&,&uid&:089500,&isOrg&:false,&slug&:&zi-wo-ben&,&isFollowed&:false,&description&:&low逼一枚&,&name&:&自我本&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fzi-wo-ben&,&avatar&:{&id&:&v2-0a71ebbeccff3&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:null,&isFollowing&:false,&hash&:&c30e6006880eff2fde2c2f3e31d6ccfe&,&uid&:32,&isOrg&:false,&slug&:&lawrenauh&,&isFollowed&:false,&description&:&&,&name&:&Lawrenauh&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Flawrenauh&,&avatar&:{&id&:&e2c16b7764978ecadbe97f&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}],&summary&:&\u003Cimg data-rawheight=\&223\& data-rawwidth=\&428\& src=\&https:\u002F\\u002Ffcbf1a944c3d59_200x112.jpg\& class=\&origin_image inline-img zh-lightbox-thumb\& data-original=\&https:\u002F\\u002Ffcbf1a944c3d59_r.jpg\&\u003E2016年过半,到目前为止,我个人认为习得的\u003Cb\u003E最值得推荐的技能之一\u003C\u002Fb\u003E就是双拼,奈何向周围的朋友推荐却普遍反映根本看不懂网上的教学说明。所以记录此文,将我浅薄的学习双拼的经验分享给大家。历史一开始我们还是先了解一下双拼本身。目前常见的汉字输入系统主…&,&reviewingCommentsCount&:0,&meta&:{&previous&:null,&next&:{&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&https:\u002F\\u002F50\u002Fv2-c6efc39ca72e_xl.jpg&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&topics&:[{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&Python&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&设计模式&}],&adminClosedComment&:false,&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&author&:{&bio&:&&,&isFollowing&:false,&hash&:&d&,&uid&:64,&isOrg&:false,&slug&:&MOOWOO&,&isFollowed&:false,&description&:&&,&name&:&MOOWOO&,&profileUrl&:&https:\u002F\\u002Fpeople\u002FMOOWOO&,&avatar&:{&id&:&f827af522&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&column&:{&slug&:&whatever&,&name&:&名字什么的随便啊&},&content&:&\u003Cp\u003E从本文开始,将会写一系列关于 \u003Cu\u003EPython 设计模式\u003C\u002Fu\u003E\u003Cb\u003E 通俗讲解\u003C\u002Fb\u003E的文章,主要参考\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\.cn\u002Fbook\u002F1715\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E《精通Python设计模式》\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E一书,\u003Cb\u003E顺序可能与原书目录顺序有所不同\u003C\u002Fb\u003E,因为我本身也是一边学习一边总结。本系列文章的主旨是\u003Cb\u003E剥开复杂的理论外壳,用最通俗的方法来讲解 \u003Cu\u003EPython 设计模式\u003C\u002Fu\u003E\u003C\u002Fb\u003E。并且,通过修改代码为更简洁的形式,来更好的破除\u003Ci\u003E\u003Cb\u003E专业词汇迷信\u003C\u002Fb\u003E\u003C\u002Fi\u003E。\u003Cbr\u003E\u003Cbr\u003E《Python 设计模式》一书将各种设计模式做了一个简单分类:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E 创建型模式\u003C\u002Fli\u003E\u003Cli\u003E结构型模式\u003C\u002Fli\u003E\u003Cli\u003E行为型模式 \u003Cbr\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E今天要讨论的是第一种——创建型模式——中的\u003Cb\u003E原型设计模式\u003C\u002Fb\u003E。\u003Cbr\u003E\u003Cbr\u003E根据书上的说法,原型模式的作用是:\u003C\u002Fp\u003E\u003Cblockquote\u003E当我们已有一个对象,并希望创建该对象的一个完整副本时,原型模式就派上用场了。在我们知道对象的某些部分会被变更但又希望保持原有对象不变之时,通常需要对象的一个副本。在这样的案例中,重新创建原有对象是没有意义的(请参考网页[ \u003Ca href=\&http:\u002F\\u002F?target=http%3A\\u002FRqBrOuM\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EMitotic division\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E ])。\u003Cbr\u003E另一个案例是,当我们想复制一个复杂对象时,使用原型模式会很方便。对于复制复杂对象,我们可以将对象当作是从数据库中获取的,并引用其他一些也是从数据库中获取的对象。若通过多次重复查询数据来创建一个对象,则要做很多工作。在这种场景下使用原型模式要方便得多。 \u003C\u002Fblockquote\u003E\u003Cp\u003E 这一段描述太抽象,其实用\u003Cb\u003E最简单\u003C\u002Fb\u003E的话来说就是:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cblockquote\u003E第一种情况,你有一个 \u003Cu\u003EApplePen\u003C\u002Fu\u003E,想要一个一模一样的 \u003Cu\u003EApplePen\u003C\u002Fu\u003E,可以直接制作一个\u003Cu\u003E ApplePen\u003C\u002Fu\u003E 的副本。 \u003Cbr\u003E\u003Cbr\u003E第二种情况,你有一个 \u003Cu\u003EApplePen\u003C\u002Fu\u003E,想要一个\u003Cu\u003E PineapplePen\u003C\u002Fu\u003E,可以通过制作一个 \u003Cu\u003EApplePen \u003C\u002Fu\u003E的副本,然后修改这个副本为 \u003Cu\u003EPineapplePen\u003C\u002Fu\u003E 的方式来达成目的。\u003Cbr\u003E第三种情况,你有一个\u003Cb\u003E非常复杂\u003C\u002Fb\u003E的 \u003Cu\u003EPenPineappleApplePen\u003C\u002Fu\u003E,然后你需要一个\u003Cu\u003EPineapplePenApplePen\u003C\u002Fu\u003E,多次操作可能会非常麻烦,那么可以以\u003Cu\u003E PenPineappleApplePen \u003C\u002Fu\u003E为原型,创建一个副本\u003Cu\u003E PenPineappleApplePen\u003C\u002Fu\u003E,再通过简单的几步就能将其修改为 \u003Cu\u003EPineapplePenApplePen\u003C\u002Fu\u003E。(其实一般情况下与第二种情况没差)\u003C\u002Fblockquote\u003E\u003Cp\u003E\u003Cbr\u003E看起来好像还是很复杂?无所谓,把\u003Cb\u003E每种情况\u003C\u002Fb\u003E中,看不懂的 | 第一个 | 多次出现的 | 单词改为\u003Cu\u003EA\u003C\u002Fu\u003E,看不懂的 | 第二个 | 多次出现的 | 单词改为 \u003Cu\u003EB\u003C\u002Fu\u003E,就明白了。\u003Cbr\u003E\u003Cbr\u003E好,我们现在把概念用最简单的话梳理清楚了,那么我们来看看代码实现。书上给出了这样一个例子:\u003C\u002Fp\u003E\u003Cblockquote\u003E一本书,第一版出版了。10年后,第二版出版了,有一定的修改。如何使用原型模式创建一个展示图书信息的应用?\u003Cbr\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E\u003Cbr\u003E这里其实可以看做我们总结出来的第二种情况,即:在有了原型对象的情况下,如何通过使用原型设计模式的编码,来得到新的对象。\u003Cbr\u003E\u003Cbr\u003E我们先看看书上给出的示例代码,原书代码中没有注释,我尝试补充了一些注释,也许会有一定的错漏:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-python\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Ecopy\u003C\u002Fspan\u003E\n\u003Cspan class=\&kn\&\u003Efrom\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Ecollections\u003C\u002Fspan\u003E \u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EOrderedDict\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&k\&\u003Eclass\u003C\u002Fspan\u003E \u003Cspan class=\&nc\&\u003EBook\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003E__init__\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ename\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eauthors\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eprice\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E**\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Erest\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n
\u003Cspan class=\&sd\&\u003E'''rest的例子有:出版商、长度、标签、出版日期'''\u003C\u002Fspan\u003E\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ename\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ename\u003C\u002Fspan\u003E\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eauthors\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eauthors\u003C\u002Fspan\u003E\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eprice\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eprice\u003C\u002Fspan\u003E\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003E__dict__\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eupdate\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Erest\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E
\u003Cspan class=\&c1\&\u003E# 添加其他额外属性\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003E__str__\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Emylist\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E[]\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eordered\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EOrderedDict\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nb\&\u003Esorted\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003E__dict__\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eitems\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E()))\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Efor\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&ow\&\u003Ein\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eordered\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ekeys\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E():\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Emylist\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eappend\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'{}: {}'\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eformat\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eordered\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]))\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E==\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'price'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Emylist\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eappend\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'$'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Emylist\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eappend\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'\u003C\u002Fspan\u003E\u003Cspan class=\&se\&\u003E\\n\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Ereturn\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E''\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ejoin\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Emylist\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&k\&\u003Eclass\u003C\u002Fspan\u003E \u003Cspan class=\&nc\&\u003EPrototype\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003E__init__\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eobjects\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nb\&\u003Edict\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E()\u003C\u002Fspan\u003E
\u003Cspan class=\&c1\&\u003E# 初始化一个原型列表\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003Eregister\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eidentifier\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eobj\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n
\u003Cspan class=\&c1\&\u003E# 在原型列表中注册原型对象\u003C\u002Fspan\u003E\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eobjects\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eidentifier\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eobj\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003Eunregister\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eidentifier\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n
\u003Cspan class=\&c1\&\u003E# 从原型列表中删除原型对象\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Edel\u003C\u002Fspan\u003E \u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eobjects\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eidentifier\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003Eclone\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eidentifier\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E**\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eattr\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n
\u003Cspan class=\&c1\&\u003E# 根据 identifier 在原型列表中查找原型对象并克隆\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Efound\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eobjects\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eget\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eidentifier\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&ow\&\u003Enot\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Efound\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Eraise\u003C\u002Fspan\u003E \u003Cspan class=\&ne\&\u003EValueError\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'Incorrect object identifier: {}'\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eformat\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eidentifier\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E))\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eobj\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ecopy\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Edeepcopy\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Efound\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eobj\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003E__dict__\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eupdate\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eattr\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E
\u003Cspan class=\&c1\&\u003E# 用新的属性值替换原型对象中的对应属性\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Ereturn\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eobj\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003Emain\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E():\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eb1\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EBook\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'The C Programming Language'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'Brian W. Kernighan'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'Dennis M.Ritchie'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E),\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eprice\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E118\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Epublisher\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'Prentice Hall'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elength\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E228\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Epublication_date\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E''\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Etags\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'C'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'programming'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'algorithms'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'data structures'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E))\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&n\&\u003Eprototype\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EPrototype\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E()\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Ecid\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'k&r-first'\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eprototype\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eregister\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ecid\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eb1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eb2\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eprototype\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eclone\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ecid\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ename\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'The C Programming Language(ANSI)'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eprice\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mf\&\u003E48.99\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elength\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E274\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Epublication_date\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E''\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eedition\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E2\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Efor\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&ow\&\u003Ein\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eb1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eb2\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Eprint\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Eprint\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s2\&\u003E\&ID b1 : {} != ID b2 : {}\&\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eformat\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nb\&\u003Eid\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eb1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E),\u003C\u002Fspan\u003E \u003Cspan class=\&nb\&\u003Eid\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eb2\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)))\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003E__name__\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E==\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'__main__'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Emain\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E()\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E我们将这段代码保存为 \u003Cu\u003Eprototype.py\u003C\u002Fu\u003E,在控制台运行,可以得到如下输出:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-pytb\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&x\&\u003Eauthors: ('Brian W. Kernighan', 'Dennis M.Ritchie')\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Elength: 228\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Ename: The C Programming Language\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Eprice: 118$\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Epublication_date: \u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Epublisher: Prentice Hall\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Etags: ('C', 'programming', 'algorithms', 'data structures')\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&x\&\u003Eauthors: ('Brian W. Kernighan', 'Dennis M.Ritchie')\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Eedition: 2\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Elength: 274\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Ename: The C Programming Language(ANSI)\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Eprice: 48.99$\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&x\&\u003Epublication_date: \u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Epublisher: Prentice Hall\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Etags: ('C', 'programming', 'algorithms', 'data structures')\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&x\&\u003EID b1 : 2 != ID b2 : 8\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E\u003Cbr\u003E熟悉 Python 的朋友可以发现,其实这段代码在 Python 中,我们要实现一样的效果,并没有这么复杂,完全可以不使用这样的方法,我们更熟悉的方法是这样的,这里只修改\u003Cu\u003E main\u003C\u002Fu\u003E 函数:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-python\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003Emain\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E():\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eb1\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EBook\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'The C Programming Language'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\n
\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'Brian W. Kernighan'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'Dennis M.Ritchie'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E),\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eprice\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E118\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Epublisher\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'Prentice Hall'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Elength\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E228\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Epublication_date\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E''\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Etags\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'C'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'programming'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'algorithms'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'data structures'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E))\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&c1\&\u003E# 这里我们彻底抛弃之前的原型设计模式的写法\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&n\&\u003Eb2\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ecopy\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Edeepcopy\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eb1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eb2\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ename\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'The C Programming Language(ANSI)'\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eb2\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eprice\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mf\&\u003E48.99\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eb2\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Elength\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E274\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eb2\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Epublication_date\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E''\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eb2\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eedition\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E2\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Efor\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&ow\&\u003Ein\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eb1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eb2\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Eprint\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Eprint\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s2\&\u003E\&ID b1 : {} != ID b2 : {}\&\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eformat\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&nb\&\u003Eid\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eb1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E),\u003C\u002Fspan\u003E \u003Cspan class=\&nb\&\u003Eid\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eb2\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)))\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E\u003Cbr\u003E\u003Cbr\u003E同样的内容,替换后再次运行,输出结果\u003Cb\u003E几乎一模一样\u003C\u002Fb\u003E。所以,我们现在明白了,得益于 Python 的灵活性,其实在一般情况下没必要搞得那么费劲,用最简单粗暴的方式就可以达成我们想要的目标。当然,这里并不是说原型模式就没用,各位根据情况,灵活处理就好。\u003C\u002Fp\u003E&,&state&:&published&,&sourceUrl&:&&,&pageCommentsCount&:0,&canComment&:false,&snapshotUrl&:&&,&slug&:,&publishedTime&:&T03:05:41+08:00&,&url&:&\u002Fp\u002F&,&title&:&通俗 Python 设计模式——原型设计模式&,&summary&:&从本文开始,将会写一系列关于 \u003Cu\u003EPython 设计模式\u003C\u002Fu\u003E\u003Cb\u003E 通俗讲解\u003C\u002Fb\u003E的文章,主要参考\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\.cn\u002Fbook\u002F1715\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E《精通Python设计模式》\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E一书,\u003Cb\u003E顺序可能与原书目录顺序有所不同\u003C\u002Fb\u003E,因为我本身也是一边学习一边总结。本系列文章的主旨是\u003Cb\u003E剥开复杂的理论外壳,用最通俗的方法来讲解 \u003Cu\u003EPython 设计模式\u003C\u002Fu\u003E\u003C\u002Fb\u003E。…&,&reviewingCommentsCount&:0,&meta&:{&previous&:null,&next&:null},&commentPermission&:&anyone&,&commentsCount&:4,&likesCount&:24}},&annotationDetail&:null,&commentsCount&:44,&likesCount&:165,&FULLINFO&:true}},&User&:{&MOOWOO&:{&isFollowed&:false,&name&:&MOOWOO&,&headline&:&&,&avatarUrl&:&https:\u002F\\u002F50\u002Ff827af522_s.jpg&,&isFollowing&:false,&type&:&people&,&slug&:&MOOWOO&,&bio&:&&,&hash&:&d&,&uid&:64,&isOrg&:false,&description&:&&,&badge&:{&identity&:null,&bestAnswerer&:null},&profileUrl&:&https:\u002F\\u002Fpeople\u002FMOOWOO&,&avatar&:{&id&:&f827af522&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}},&Comment&:{},&favlists&:{}},&me&:{},&global&:{&experimentFeatures&:{&ge3&:&ge3_9&,&ge2&:&ge2_1&,&nwebStickySidebar&:&sticky&,&android

我要回帖

更多关于 微软双拼键位 的文章

 

随机推荐