1.çè±ä»£ç ç¼ç¨python(ç«ç°è±ä»£ç ç¼ç¨python)
2..NET社区,用源专业社区来了源社区-51Aspx源社区
3.什么是用源“JAFS Collaborative Source License”?
4.Vue2.0源码阅读(2) —vue.nextTicket()
5.ç¨åºè¯è¨Pythonï¼
çè±ä»£ç ç¼ç¨python(ç«ç°è±ä»£ç ç¼ç¨python)
æ¾çè±ç代ç
#-*-coding:utf-8-*-importmath,random,timeimportthreadingimporttkinterastkimportreuuidFireworks=[]maxFireworks=8height,width=,classfirework(object):def__init__(self,color,speed,width,height):=uuid.uuid1()self.radius=random.randint(2,4)~4åç´ self.color=colorself.speed=speed.5-3.5ç§self.status=0ï¼status=0ï¼çç¸åï¼status=1ï¼å½statusæ¶ï¼çè±ççå½æç»æ¢self.nParticle=random.randint(,)self.center=[random.randint(0,width-1),random.randint(0,height-1)]self.oneParticle=[]ï¼%ç¶ææ¶ï¼self.rotTheta=random.uniform(0,2*math.pi)ï¼x=a*cos(theta),y=b*sin(theta)=[a,b]
pythonç«é ·çè±è¡¨ç½æºä»£ç æ¯å¤å°ï¼å¦å®æ¬æç¨åï¼ä½ ä¹è½ååºè¿æ ·ççè±ç§ã
å¦ä¸å¾ç¤ºï¼æ们è¿ééè¿è®©ç»é¢ä¸ä¸ä¸ªç²ååè£ä¸ºXæ°éçç²åæ¥æ¨¡æçç¸ææãç²åä¼åçï¼è¨èâï¼æææ¯å®ä»¬ä¼ä»¥æé移å¨ä¸ç¸äºä¹é´çè§åº¦ç¸çãè¿æ ·å°±è½è®©æ们以ä¸ä¸ªåå¤è¨èçååå½¢å¼æ¨¡æåºçè±ç»½æ¾çç»é¢ã
ç»è¿ä¸å®æ¶é´åï¼ç²åä¼è¿å ¥ï¼èªç±è½ä½âé¶æ®µï¼ä¹å°±æ¯ç±äºéåå ç´ å®ä»¬å¼å§å è½å°å°é¢ï¼ä»¿è¥ç»½æ¾åççççè±ã
åºæ¬ç¥è¯ï¼ç¨PythonåTkinter设计çè±ã
è¿éä¸åä¸è¡èææ°å¦ç¥è¯å ¨ä¸¢åºæ¥ï¼æ们边å代ç 边说ç论ãé¦å ï¼ç¡®ä¿ä½ å®è£ åå¯¼å ¥äºTkinterï¼å®æ¯Pythonçæ åGUIåºï¼å¹¿æ³åºç¨äºåç§åæ ·ç项ç®åç¨åºå¼åï¼å¨Pythonä¸ä½¿ç¨Tkinterå¯ä»¥å¿«éçå建GUIåºç¨ç¨åºã
importtkinterastk
fromPILimportImage,ImageTk
fromtimeimporttime,sleep
fromrandomimportchoice,uniform,randint
frommathimportsin,cos,radians
é¤äºTkinterä¹å¤ï¼ä¸ºäºè½è®©çé¢ææ¼äº®çèæ¯ï¼æ们ä¹å¯¼å ¥PILç¨äºå¾åå¤çï¼ä»¥åå¯¼å ¥å ¶å®ä¸äºå ï¼æ¯å¦timeï¼randomåmathãå®ä»¬è½è®©æ们æ´å®¹æçæ§å¶çè±ç²åçè¿å¨è½¨è¿¹ã
Tkinteråºç¨çåºæ¬è®¾ç½®å¦ä¸ï¼
root=tk.Tk()
为äºè½åå§åTkinterï¼æä»¬å¿ é¡»å建ä¸ä¸ªTk()æ ¹é¨ä»¶ï¼rootwidgetï¼ï¼å®æ¯ä¸ä¸ªçªå£ï¼å¸¦ææ é¢æ åç±çªå£ç®¡çå¨æä¾çå ¶å®è£ 饰ç©ãè¯¥æ ¹é¨ä»¶å¿ é¡»å¨æ们åå»ºå ¶å®å°é¨ä»¶ä¹åå°±å建å®æ¯ï¼èä¸åªè½æä¸ä¸ªæ ¹é¨ä»¶ã
w=tk.Label(root,text="HelloTkinter!")
è¿ä¸è¡ä»£ç å å«äºLabelé¨ä»¶ã该Labelè°ç¨ä¸ç第ä¸ä¸ªåæ°å°±æ¯ç¶çªå£çååï¼å³æ们è¿éç¨çï¼æ ¹âãå ³é®ååæ°ï¼textâæææ¾ç¤ºçæåå 容ãä½ ä¹å¯ä»¥è°ç¨å ¶å®å°é¨ä»¶ï¼Buttonï¼Canvasççã
w.pack()
root.mainloop()
æ¥ä¸æ¥çè¿ä¸¤è¡ä»£ç å¾éè¦ãè¿éçæå æ¹æ³æ¯åè¯Tkinterè°æ´çªå£å¤§å°ä»¥éåºæç¨çå°é¨ä»¶ãçªå£ç´å°æ们è¿å ¥Tkinteräºä»¶å¾ªç¯ï¼è¢«root.mainloop()è°ç¨æ¶æä¼åºç°ãå¨æä»¬å ³éçªå£åï¼èæ¬ä¼ä¸ç´å¨åçå¨äºä»¶å¾ªç¯ã
å°çè±ç»½æ¾è½¬è¯æ代ç
ç°å¨æ们设计ä¸ä¸ªå¯¹è±¡ï¼è¡¨ç¤ºçè±äºä»¶ä¸çæ¯ä¸ªç²åãæ¯ä¸ªç²åé½ä¼æä¸äºéè¦çå±æ§ï¼æ¯é äºå®çå¤è§å移å¨ç¶åµï¼å¤§å°ï¼é¢è²ï¼ä½ç½®ï¼é度ççã
跨年çè±ä»£ç ï½ç¨Pythonéä½ ä¸åºè·¨å¹´çè±ç§å·²ç»æ¥è¿å°¾å£°äºï¼å³å°å°æ¥ï¼æ¬ææ们ç¨Pythonéä½ ä¸åºè·¨å¹´çè±ç§ã
æ们ç¨å°çPython模åå æ¬ï¼tkinterãPILãtimeãrandomãmathï¼å¦æ第ä¸æ¹æ¨¡å没æè£ çè¯ï¼pipinstallä¸ä¸å³å¯ï¼ä¸é¢çä¸ä¸ä»£ç å®ç°ã
导åº
çè±é¢è²
å®ä¹çè±ç±»
çæ¾çè±
å¯å¨
çä¸ä¸ææï¼
年跨年çè±ä»£ç å¯å¤å¶
çè±ä»£ç å¦ä¸ï¼
packagelove;
importjava.applet.Applet;
importjava.awt.Color;
importjava.awt.Graphics;
importjava.net.URL;
importjava.util.Random;
çè±
@authorenjoy
@SuppressWarnings("serial")
publicclassQextendsAppletimplementsRunnable
publicintspeed,variability,Max_Number,Max_Energy,Max_Patch,
Max_Length,G;
publicStringsound;
privateintwidth,height;
privateThreadthread=null;
privateBeaClassDemobcd[];
publicvoidinit()?
inti;
this.setSize(,);
width=getSize().width-1;
height=getSize().height-1;
speed=1;?//çè±ç»½æ¾çé度
variability=;
Max_Number=;?//å¯ååºçè±çæ大æ°ç®
Max_Energy=width+;
Max_Patch=;?//æ大çæç¹æ°
Max_Length=;?//æç¹çæ大è·ç¦»
G=;?//åå°é¢å¼¯æ²çå度
bcd=newBeaClassDemo[Max_Number];
for(i=0;iMax_Number;i++)
bcd[i]=newBeaClassDemo(width,height,G);
}
publicvoidstart(){
if(thread==null){
thread=newThread(this);
thread.start();
}
}
@SuppressWarnings("deprecation")
publicvoidstop(){
if(thread!=null){
thread.stop();
thread=null;
}
}
@SuppressWarnings({ "unused","static-access"})
publicvoidrun(){
inti;
intE=(int)(Math.random()*Max_Energy*3/4)+Max_Energy/4+1;
intP=(int)(Math.random()*Max_Patch*3/4)?//çè±çæç¹æ°
+Max_Patch/4+1;
intL=(int)(Math.random()*Max_Length*3/4)?//çè±å¯åå°åºçè·ç¦»
+Max_Length/4+1;
longS=(long)(Math.random()*);
booleansleep;
Graphicsg=getGraphics();
URLu=null;
while(true){
try{
thread.sleep(/speed);
catch(InterruptedExceptionx){
sleep=true;
for(i=0;iMax_Number;i++)
sleep=sleepbcd[i].sleep;
if(sleepMath.random()*variability){
E=(int)(Math.random()*Max_Energy*3/4)+Max_Energy/4
+1;
P=(int)(Math.random()*Max_Patch*3/4)+Max_Patch/4
+1;
L=(int)(Math.random()*Max_Length*3/4)+Max_Length/4
+1;
S=(long)(Math.random()*);
for(i=0;iMax_Number;i++){
if(bcd[i].sleepMath.random()*Max_Number*L1)
bcd[i].init(E,P,L,S);
bcd[i].start();
bcd[i].show(g);
publicvoidpaint(Graphicsg)?
g.setColor(Color.black);
g.fillRect(0,0,width+1,height+1);
classBeaClassDemo
publicbooleansleep=true;
privateintenergy,patch,length,width,height,G,Xx,Xy,Ex[],Ey[],x,
y,Red,Blue,Green,t;
privateRandomrandom;
publicBeaClassDemo(inta,intb,intg)
width=a;
height=b;
G=g;
publicvoidinit(inte,intp,intl,longseed)?
inti;
energy=e;
patch=p;
length=l;
//å建ä¸ä¸ªå¸¦ç§åçéæºæ°çæå¨
random=newRandom(seed);
Ex=newint[patch];
Ey=newint[patch];
Red=(int)(random.nextDouble()*)+;
Blue=(int)(random.nextDouble()*)+;
Green=(int)(random.nextDouble()*)+;
Xx=(int)(Math.random()*width/2)+width/4;
Xy=(int)(Math.random()*height/2)+height/4;
for(i=0;ipatch;i++){
Ex[i]=(int)(Math.random()*energy)-energy/2;
Ey[i]=(int)(Math.random()*energy*7/8)-energy/8;
publicvoidstart
t=0;
sleep=false;
publicvoidshow(Graphicsg)?
if(!sleep)
if(tlength)
inti,c;
doubles;
Colorcolor;
c=(int)(random.nextDouble()*)-+Red;
if(c=0c)
Red=c;
c=(int)(random.nextDouble()*)-+Blue;
if(c=0c)
Blue=c;
c=(int)(random.nextDouble()*)-+Green;
if(c=0c)
Green=c;
color=newColor(Red,Blue,Green);
for(i=0;ipatch;i++)
s=(double)t/;
x=(int)(Ex[i]*s);
y=(int)(Ey[i]*s-G*s*s);
g.setColor(color);
g.drawLine(Xx+x,Xy-y,Xx+x,Xy-y);
if(t=length/2)
intj;
for(j=0;j2;j++)
s=(double)((t-length/2)*2+j)/;
x=(int)(Ex[i]*s);
y=(int)(Ey[i]*s-G*s*s);
g.setColor(Color.black);
g.drawLine(Xx+x,Xy-y,Xx+x,Xy-y);
常ç¨çç¼ç¨è¯è¨ã
ç¼ç¨è¯è¨ä¸ï¼Cè¯è¨
Cè¯è¨æ¯ä¸çä¸ææµè¡ã使ç¨æ广æ³çé«çº§ç¨åºè®¾è®¡è¯è¨ä¹ä¸ãå¨æä½ç³»ç»åç³»ç»ä½¿ç¨ç¨åºä»¥åéè¦å¯¹ç¡¬ä»¶è¿è¡æä½çåºåï¼ç¨Cè¯è¨ææ¾ä¼äºå ¶å®é«çº§è¯è¨ï¼è®¸å¤å¤§ååºç¨è½¯ä»¶é½æ¯ç¨Cè¯è¨ç¼åçã
ç¼ç¨è¯è¨äº:java
Javaæ¯ä¸ç§å¯ä»¥æ°å跨平å°åºç¨è½¯ä»¶çé¢å对象çç¨åºè®¾è®¡è¯è¨ï¼æ¯ç±SunMicrosystemså ¬å¸äºå¹´5ææ¨åºçJavaç¨åºè®¾è®¡è¯è¨åJavaå¹³å°ï¼å³JavaSE,JavaEE,JavaMEï¼çæ»ç§°ã
ç¼ç¨è¯è¨ä¸:c++
C++è¿ä¸ªè¯å¨ä¸å½å¤§éçç¨åºåååä¸é常被读åâCå å âï¼è西æ¹çç¨åºåé常读åâCplusplus","CPPâãå®æ¯ä¸ç§ä½¿ç¨é常广æ³ç计ç®æºç¼ç¨è¯è¨ãC++æ¯ä¸ç§éææ°æ®ç±»åæ£æ¥çãæ¯æå¤éç¼ç¨èå¼çéç¨ç¨åºè®¾è®¡è¯è¨ã
.NET社区,专业社区来了源社区-Aspx源社区
Aspx源社区,用源作为开发者和爱好者的用源垂直型门户社区,汇聚了Aspx平台的用源百万注册用户,以及行业头部产品、用源金橙子软件源码运营、用源设计、用源运维、用源测试、用源开发者及其爱好者,用源旨在打造一个开放性的用源开发技能及资源学习交流平台。
值此.NET周年之际,用源Aspx特运营此社区,用源致力于.NET生态的用源持续优化与提升。
在源社区中,用户可以参与圈子功能,发布内容、提问、broadcast源码解析发起投票、发布小游戏等互动活动。目前,已开通的圈子包括.NET技术圈、.NET云原生挑战赛圈子、求职招聘圈、Web3圈、代码人生圈、Aspx反馈圈。
在.NET技术圈中,每日分享.NET相关技术文章,为技术人提供丰富的知识资源,同时提供优质外文翻译内容,促进技术交流。.NET云原生挑战赛圈子,作为微软与Aspx联合举办的赛事,旨在推动.NET技术的发展,提供公益性质的qq性别源码赛事奖金与奖品,同时设有大咖授课模块,目前已有十三场大咖授课,每周都有专业讲师无私授课。
求职招聘圈为技术人提供优质招聘信息,帮助寻找工作,了解就业市场,同时也是打工人的交流平台。代码人生圈则成为技术人吐槽、畅想、抱怨与分享的平台。Aspx反馈圈让用户在Aspx平台遇到的问题得到及时解决,营造更好的互动交流环境。
源社区还设有大咖授课专区,提供每周一次的免费技术直播课程,以及专题、教程、文章等功能,旨在全面支持技术人的一的源码学习与成长。时间轴记录了社区发展历程,万能导航与供求大厅为用户提供高效便捷的服务。源社区与Aspx源码主站用户中心已打通,近期将实现会员打通,方便用户分享技术积分、互动积分,并通过积分获取平台源码,促进技术学习与应用。
源社区与Aspx源码主站用户中心的连接,将为开发者和企业提供更顺畅的技术沟通与合作渠道,推动.NET技术的进一步发展与应用,共同为开发者与企业赋能。
什么是“JAFS Collaborative Source License”?
英语缩写词“JCSL”在技术领域中,实际上是“JAFS Collaborative Source License”的缩写,直译为“JAFS协作源代码许可证”。这个术语主要应用于软件开发和开源社区,表示在JAFS项目中使用的许可协议,使得代码可以被共享和协作开发,聚合收银源码同时保持版权和使用规则的清晰界定。 在中文里,JCSL的拼音是“xié zuò yuán dài mǎ xǔ kě zhèng”,缩写词被归类在计算机科学中的“Software”领域,主要用于描述软件开发过程中的授权和许可管理。它在英语中的流行度虽然可能不如其他常见缩写高,但在特定的专业圈子内,如开源开发者和软件开发者群体中,有着一定的认知度。 总的来说,JCSL是一种专门用于定义JAFS项目中源代码许可的术语,对于理解和遵循开源软件的开发规则至关重要。尽管它不是日常英语中的常用词汇,但在其特定的上下文中,它具有明确的含义和重要作用。请注意,所有内容仅供参考,使用时请确保符合相关法律法规和版权规定。Vue2.0源码阅读(2) —vue.nextTicket()
揭开Vue.nextTick之谜
在vue圈子中,有一句广为流传的“都市传说”:“遇事不决,问nextTick。”这句话背后的nextTick究竟是何物?根据官方文档的解释,nextTick()是在下次DOM更新循环结束之后执行延迟回调。其核心功能是在数据更新后自动调用回调函数,获取更新后的DOM。接下来,我们将深入源码,一探nextTick的真谛。
将nextTick定义至Vue原型链的代码位于src/core/instance/render.js,具体实现则在src/core/util/next-tick.js。nextTick接受两个参数:函数cd(实际使用场景中,为延迟执行的函数)与this上下文。内部定义了一个回调函数数组callbacks,当cb存在时将其添加至数组,同时将回调函数的上下文指向组件的this;若cb不存在,则将resolve函数添加至数组。接着判断pending值,其用于控制状态。当pending值为false,表示无回调函数正在执行,进而执行timerFunc函数。timerFunc函数在cb不存在且浏览器支持Promise时返回一个Promise,允许在不传入回调的情况下通过this.$nextTick().then(cb)进行调用。
timerFunc看似实现关键,实则执行逻辑围绕Promise、MutationObserver、setImmediate与setTimeout(f(), 0)等方法展开。若系统支持Promise,则使用Promise执行延时;不支持Promise时,依次判断是否支持MutationObserver、setImmediate或setTimeout,选择合适的方法执行flushCallbacks函数。
flushCallbacks函数负责将pending状态设为false,并将callbacks数组复制至copies数组,清空callbacks。接着遍历copies数组,依次执行回调函数(即传入nextTick的cb函数)。至此,我们理解了nextTick的核心机制与使用场景。
MutationObserver:在源码阅读中,我们发现若系统不支持Promise,则使用MutationObserver作为替代方案。MutationObserver是监听DOM树变更的接口,其设计用于替代DOM3 Events规范中的Mutation Events功能。简单理解,MutationObserver用于监听DOM变动,当DOM发生任何更改时,它会接收到通知。
MutationObserver的使用方式如代码所示,实例化MutationObserver并指定回调函数与需要监控的DOM元素与变动类型。调用observer.observe(dom, options)方法进行观察。options对象中定义了需要观察的变动类型,如childList、attributes、characterData等。
下面通过一个简单的demo来理解MutationObserver。在运行该demo后,屏幕显示了,说明文本节点已添加至DOM中。然而,控制台打印的I值只有1,这意味着DOM变动只触发了一次。这表明MutationObserver在异步处理DOM变化,直到页面上所有DOM操作完成时执行一次,实现高效处理。
在nextTick中,MutationObserver用于触发flushCallbacks函数。通过文本节点的操作触发MutationObserver,从而执行flushCallbacks。至此,我们理解了nextTick的实现与MutationObserver的用法。
源码阅读让我们发现,nextTick并非传说中的神物,其主要应用场合与DOM操作相关。在遇到无法在DOM更新前操作DOM的情况时,可以考虑使用nextTick。由于nextTick在DOM更新循环结束后执行,因此在created钩子中操作DOM成为可能,实现目标。
ç¨åºè¯è¨Pythonï¼
pythonæ¯ä»ä¹è¯è¨
åç±»:çµè/ç½ç»ç¨åºè®¾è®¡å ¶ä»ç¼ç¨è¯è¨
é®é¢æè¿°:
ä»çä¸ææ¯ä»ä¹ï¼ä»æä»ä¹ç¹ç¹
解æ:
Pythonæ¯ä»ä¹ï¼
Pythonæ¯ä¸ç§å¼æ¾æºä»£ç çèæ¬ç¼ç¨è¯è¨ï¼è¿ç§èæ¬è¯è¨ç¹å«å¼ºè°å¼åé度å代ç çæ¸ æ°ç¨åº¦ãå®å¯ä»¥ç¨æ¥å¼ååç§ç¨åºï¼ä»ç®åçèæ¬ä»»å¡å°å¤æçãé¢å对象çåºç¨ç¨åºé½æ大æ¾èº«æçå°æ¹ãPythonè¿è¢«å½ä½ä¸ç§å ¥é¨ç¨åºåæéåææ¡çä¼ç§è¯è¨ï¼å 为å®å è´¹ãé¢å对象ãæ©å±æ§å¼ºåæ¶æ§è¡ä¸¥æ ¼çç¼ç æ åã
Pythonæ¯å è´¹ç
GuidovanRossumäºå¹´å¼å§å¼åPythonï¼æåçç®çæ éæ¯ä¸ä¸ªèªå¨±ç项ç®ãä½ä¸ºMontyPythonçé£è¡é©¬æå¢èç®çç±å¥½è ï¼ä»ç»èªå·±å¼åçè¿ç§ç¼ç¨è¯è¨èµ·äºç°å¨è¿ä¸ªå¤æªçååï¼ä¸æææå°±æ¯å¤§èãPythonæå设计为ä¸ç§å代Amoebaåå¸å¼æä½ç³»ç»ABCçèæ¬è¯è¨ï¼ä½ä¸ä¹ è¿ç§æ°åç¼ç¨è¯è¨å¾å¿«å°±åå±æå¯ä»¥è§£å³ç¸å½å¤é®é¢çå©å¨ï¼ç°å¨æ´å¼å ¥å°äºå¤ç§å¹³å°ã
Guidoç®åè¿æ¯Python软件åºéä¼ç主å¸ã该ç»ç»æç §GNUå ¬å ±è®¸å¯åè®®çè¦æ±æ¥æPythonçç¥è¯äº§æå许å¯æãPythonå¯ä»¥ç¨å¨å¤ç§å¹³å°ä¸ï¼å æ¬WindowsãMacintoshååç§å¸¸è§çUNIXç³»ç»ãå¦å¤é对PalmOSå微软çPocketPCçç¸åºçæ¬ä¹å¨å¼åä¸ã
Pythonåè´¨è¶ ç¾¤
è½ç¶Python常ç¨æ¥å建ç®åçèæ¬ï¼ä½å®éç¨çç¼ç¨ææ¯å¯ä¸ç®åï¼æ¯å¦é¢å对象ç¼ç ãå¥æ¥åã线ç¨åGUIççãåå¦ä½ æ¯ä¸ä½åå ¥æµçç¨åºåï¼è¿äºç¹æ§æ¾ç¶å¯¹ä½ 太æ帮å©äºï¼å ä¸ºä½ å¯ä»¥å¾å¿«çææççç¼ç¨è¯æ³åç¼ç å®è·µï¼ä¹ååå¦ä¹ å ¶ä»è¯è¨ï¼æ¯å¦Javaæè C++çå¼å ¥çææ¯æ¦å¿µå°±å®¹æå¤äºãèæ¬å¯ä»¥åç¬æ§è¡ï¼ä¸è¿ï¼ä½ è¿å¯ä»¥éè¿ç±»æ件åå类对象类å以å åå©ç¨è¿ç§è¯è¨ç强大åè½ã
Pythonåºå«äºå ¶ä»é¢å对象è¯è¨çå ³é®æ两ç¹ãé¦å ï¼Python强è°ç©ºæ ¼åç¼ç ç»æï¼ä»è令å¼åè ç代ç å ·æè¯å¥½çéç¨æ§ãå ¶æ¬¡ï¼æ§è¡èæ¬ä¹åæ é¡»ç¼è¯Python代ç ï¼è¿å°±æ¯å®ä¸ºä»ä¹è¢«å½ä½èæ¬è¯è¨çåå ã
Pythonæäºæ©å±
Pythonè¯è¨æä¸ä¸ªå¼äººæ³¨ç®çä¼å¿ï¼å®å¯ä»¥é对è¯è¨æ æ³å®æåè½çå½æ°è°ç¨å½æ°åºãPythonè¿å ·ææäºç¸å½æç¨çå·¥å ·å¸®å©å¼ååºå¤æçåºç¨ç¨åºãå ¶ä¸æ常ç¨çå°±æ¯Tkinkerï¼è¿ç§å·¥å ·å¯ä»¥å®ç°è·¨å¹³å°çGUIå¼åãå¦ä¸ç§wxPythonå·¥å ·åæ¯å¯¹wxWindows跨平å°C++æ¡æ¶çæ©å±ãWxPythonç®åå·²ç»æ¯æWindowsåLinuxå¹³å°ãPythonImagingLibraryå¯ä»¥è®©Pythonå建ãæå¼ãç¼è¾åä¿®æ¹å¾è±¡ï¼å æ¬.gifã.jpegå.pngçã为äºäºè§£å¸¸ç¨çPythonæ©å±ååºç¨ï¼ä½ ä¸å¦¨è®¿é®ä¸TheVaultsofParnassusã
Pythonèªèº«è¿å¯ä»¥åµå ¥å°å ¶ä»ç¼ç¨è¯è¨ä¸ãæ常è§çå°±æ¯jython/]Jythonï¼è¿æ¯ä¸ç§ç¨Javaç¼åçPython解éå¨ãè¿æ ·ä½ å°±å¯ä»¥åæ¶å©ç¨ä¸¤ç§è¯è¨çä¼ç¹ãä½ è¿å¯ä»¥å¨å¼ºå¤§çJavaåºç¨ç¨åºæ¡æ¶ä¸ç»åPythonæ¸ æ°çè¯æ³æ¥å建åºä¾èµäºä¸¤ç§è¯è¨åºçåºç¨ç¨åºã
ç¼ç æ å
ä¸¥æ ¼çPythonè¯æ³æ¯å级ç¨åºå忽ç¥è¿ä¸å¼ºå¤§ç¼ç¨è¯è¨çæ主è¦åå ãå大å¤æ°çå ¶ä»é¢åWebèæ¬è¯è¨ä¸åçæ¯ï¼Pythonç空ç½æçä¸ä¾èµäºæ¬å·æè åå·æ¥è¡¨ç¤ºè¯å¥ç»æï¼æ¢è¡åå ä½ç¬¦ç¨æ¥æ述代ç çå¯è§ç»æãè¿ç§ç¼ç¨æ¹å¼ä¹çä¹ä¸ä»¤äººæå°åç¦ï¼ä½å´å¯¹ä½ å¦æè«å¤§ç好å¤ï¼è¿å°±æ¯ä»£ç çå¯é æ§ãPythonè¿ç§ç»æåæ¯å»ºç«å¨ä¸é¢çç论ä¹ä¸ï¼å¼åè çå·¥ä½æ¶é´æ¯æºæ财产ä¸ææä»·å¼çè´¢å¯ãä¸æ¦ä½ ä¹ æ¯äºç¼åPython代ç çè§åãå®é ä¸ä½ å°±ä¹ æ¯äºä¸ç§å 建çç¼ç æ åãè¿ä¹æ£æ¯å¤§å¤æ°Pythonå¼åè æä¾èµçæ åã
è·åPython
ä½ å¯ä»¥ä»[url=python]pythonæè å类平å°ä¸çPythonçæ¬ãActiveStateç½ç«ä¹åå¸ç¨äºWindowsãLinuxåSolarisçå¹³å°çPythonåºã
æç®åçPython代ç
ä¸é¢æ们举ä¾è¯´æPythonãåè®¾ä½ ç®å使ç¨çæ¯Windowsç³»ç»ï¼èä¸å·²ç»å®è£ äºPythonï¼è¯·é¦å å¯å¨IDLEï¼ä¹å°±æ¯PythonçGUIãç°å¨å¤äºPythonShellä¸ï¼å¦æä½ å¨UNIXç±»åçç³»ç»ä¸å°±éè¦é®å ¥pythonç±»åæç¤ºä½ çPythonå¯æ§è¡æ件ï¼ãæ¥çå¨""æ示符ä¸é®å ¥ï¼
print"HelloWorld"
è¿ä¸ªå¤§å®¶è³çè½è¯¦çç¨åºå°±å¨å±å¹ä¸æ¾ç¤ºåºç»æï¼ä½ è¿å¯ä»¥å¦ä¸æ示ç»åéèµå¼ï¼
myvar=
printmyvar
å¨ä¸ä¾ä¸ä¼æ¾ç¤ºç»æã
å¦æä½ å¼åçèæ¬æ é¡»å¨PythonShellä¸ç´æ¥è¾å ¥Pythonå°±æ´æç¨äºãç¨åºæ¸ åAå°±å å«äºä¸ä¸ªHelloWorldèæ¬ç示ä¾ï¼å ¶ä¸ç¼åäºif-elseè¯å¥ã
ä½ å¯ä»¥å¨å½ä»¤è¡ä¸é®å ¥scriptname.pyæ¥æ§è¡èªå·±çèæ¬ï¼pyæ¯Pythonèæ¬çæ åæ件æ©å±åï¼ãä½ åºè¯¥è½çå°æ£ç¡®çæ¾ç¤ºç»æãæ¸ åAä¸ï¼è·çifåelseä¹åç±å ä½ç¬¦ç¼©æçè¯å¥å°±æ¯ç©ºç½æ ¼å¼åçä¸é¨åã
è¿äºå¾ç®åç示ä¾æ¼ç¤ºäºPythonæ¸ æ°çè¯æ³ã为äºäºè§£æ´å¤æå ³Pythonç¼ç¨çä¿¡æ¯ï¼ä½ ä¸å¦¨æ¥çä¸Pythonç½ç«ä¸çåå¦è æåãå¦æä½ ä¸ä¹ æ¯äºä¸ç½æµè§ï¼é£ä¹ä½ è¿å¯ä»¥é 读O'ReillyåNewRidersåºççæå ³å¾ä¹¦ãæ¯å¦HowtoThinkLikeaComputerScientist:LearningwithPythonåPythonEssentialReferenceã
å°ç»
ä¸è®ºä½ æ¯ä¸ä½åå¦ç¼ç¨è¯è¨ä»¥å¾å¢é¿èªå·±ç¥è¯æè½çå ¥é¨ç¨åºåè¿æ¯ä¸ºäºè°åæ´å¤§ä»£ç å¯é æ§çPerlé«æï¼ä½ é½ä¼åç°Pythonæ¯ä¸ç§ç¸å½çµæ´»å强大çç¼ç¨è¯è¨ãå®å¯ä»¥å¼ååºåç§åæ ·çåºç¨ç¨åºï¼ä»åè½é½å¤çé®ä»¶å表软件å°åç§è·¨å¹³å°çGUIåºç¨ç¨åºä¸åºä¿±å ¨ã
ä¸é¢ç¨å°çæ¸ åA[re:xyb]
#ListA
#(IfyouareonanUNIXtypesystemyoumayhavetomodifythefirstlinetopointto
yourPythonexecutable.)
#!/usr/bin/pythonmyvar="HelloWorld"ifmyvar=="HelloWorld":printmyvarelse:print"myvardoesnotequalHelloWorld"
[ç²¾å]å¦å¤ï¼æä¹ä»ç»ä¸æ¬ä¹¦[re:xyb]
(enthusiast)
--:
BruceEckelçThinkinginPythonï¼å¯ä»¥ä»è¿éä¸è½½ã
BruceEckelå·²ç»åºççThinkinginJavaåThinkinginC++å¯é½æ¯é¼é¼å¤§åãä»æ£å¨åçæThinkinginPythonåThinkinginPatternï¼ä¸ç¥éä»ä¹æ¶åå¯ä»¥åºçã
å ¶ä»BruceEckelçèä½ä¸è½½ç®å½ï¼BruceEckel'sFreeElectronicBooks
æç« é项ï¼
pythonæ¯æ好çç¼ç¨è¯è¨å?
æ¯çï¼Pythonè¯çä¹å被èªä¸ºæ容æä¸æçç¼ç¨è¯è¨ãPythonç设计å²å¦å¼ºè°ä»£ç çå¯è¯»æ§åç®æ´çè¯æ³ï¼ä½¿å¾Pythonæ¯å ¶ä»è¯è¨æ´å çç®æ´ã
Python常被称为è¶æ°´è¯è¨ï¼è½å¤æç¨å ¶ä»è¯è¨å¶ä½çåç§æ¨¡å(å°¤å ¶æ¯C/C++)å¾è½»æ¾å°èç»å¨ä¸èµ·ã以å强大çæºå¨å¦ä¹ åè½åºçæ¯æï¼ä½¿å¾Python被èªä¸ºæ好ç人工æºè½è¯è¨ã
ä¸ä¸ªåå å°±æ¯Pythonç°å¨å·²ç»éæ¸åå°åµå ¥å¼çæ¯æãæ¾å¨ä»¥åï¼åå°åµå ¥å¼ç¡¬ä»¶çéå¶ï¼ä¸è¬åªè½æ¯æä¸äºç¼è¯è¯è¨ãä½æ¯ç°å¨éçåµå ¥å¼ç¡¬ä»¶åå¾è¶æ¥è¶å¼ºå¤§ï¼ä»ç硬件è½å足以æ¯æèµ·Pythonçè¿è¡ãèPython对äºä¸äºç¹å®çåµå ¥å¼åºç¨åºæ¯å¯ä»¥é常ç®åãæ¹ä¾¿ãå¿«éçæ建起å¯è¿è¡ç³»ç»ãå æ¤ï¼Pythonç°å¨å¨åµå ¥å¼ååééæ¸å¾å°åºç¨å¹¶ä¸ç«äºèµ·æ¥ã
å¦ä¸ä¸ªåå å°±æ¯å¨æ°æ®é¢åï¼Pythonæ£å¨æå¼åRçè·ç¦»ï¼å¨IEEESpectrumçè°æ¥ä¸Rè¯è¨çç度æ£å¨éæ¸çä¸éï¼ä¸æ¤åæ¶ï¼æ°æ®åæé¢åå´è¿æ¯å温ãèªç¶çï¼Pythonçç¨æ·å°±åå¾å¤äºèµ·æ¥ã
常è¨é:"æµæ°´çè¯è¨ï¼éæçPython"ï¼Pythonç¼ç¨è¯è¨èªèº«å ·æ天ç丽质ï¼æäºè¯»åï¼é常å®ç¨ï¼ä»èèµ¢å¾äºå¹¿æ³ç群ä¼åºç¡ï¼è¢«èªä¸º"å®å®æ好çç¼ç¨è¯è¨"ï¼è¢«æ æ°ç¨åºåçç追æ§ãç±äºå ¶å¯æ©å±æ§ï¼éåºæ§åæäºå¦ä¹ èæ为å¢é¿æå¿«çç¼ç¨è¯è¨ä¹ä¸ã
Pythonçæ´ä½è¯è¨è®¾è®¡ï¼ä½çº§åé«çº§ç¼ç¨ç平衡ï¼æ¨¡ååç¼ç¨åæµè¯æ¡æ¶ä½¿å ¶ä¸åäºå ¶ä»è¯è¨ãå³ä¾¿æ¯ä¸ç¸å ³çå ¶ä»è¡ä¸äººå£«ï¼ä¹è½å¾å®¹æç¨Pythonå®æ项ç®ï¼çè³å©ç¨å®æå转è¡!
èä¸éç大æ°æ®å人工æºè½çåå±ï¼Pythonåå°äºè¶æ¥è¶å¤ç¨åºåç欢è¿ãâ人çè¦çï¼æç¨Pythonãâå·²ç»å¨ç¨åºåçä¸çä¸å¹¿ä¸ºæµä¼ ã
pythonæ¯ä¸ç§ä»ä¹ç±»åçç¼ç¨è¯è¨Pythonæ¯ä¸é¨è·¨å¹³å°ãå¼æºãå è´¹ç解éåé«çº§å¨æç¼ç¨è¯è¨ã
é¤äºè§£éæ§è¡ï¼Pythonè¿æ¯æ伪ç¼è¯å°æºä»£ç 转æ¢ä¸ºåèç æ¥ä¼åç¨åºæé«è¿è¡é度å对æºä»£ç è¿è¡ä¿å¯ï¼å¹¶ä¸æ¯æ使ç¨py2exeãpyinstallerãcx_Freezeæå ¶ä»ç±»ä¼¼å·¥å ·å°Pythonç¨åºåå ¶ææä¾èµåºæå 为æ©å±ç¨åºåexeçå¯æ§è¡ç¨åºï¼ä»èå¯ä»¥è±ç¦»Python解éå¨ç¯å¢åç¸å ³ä¾èµåºèå¨Windowså¹³å°ä¸ç¬ç«è¿è¡ã
Pythonæ¯æå½ä»¤å¼ç¼ç¨ãå½æ°å¼ç¼ç¨ãå®å ¨æ¯æé¢å对象ç¨åºè®¾è®¡ï¼è¯æ³ç®æ´æ¸ æ°ï¼å¹¶ä¸æ¥æ大éçå ä¹æ¯æææé¢ååºç¨å¼åçæçæ©å±åºï¼ä¹æ人å欢æPython称为ï¼è¶æ°´è¯è¨âï¼å 为å®å¯ä»¥æå¤ç§ä¸åè¯è¨ç¼åçç¨åºèåå°ä¸èµ·å®ç°æ ç¼æ¼æ¥ï¼æ´å¥½å¾åæ¥ä¸åè¯è¨åå·¥å ·çä¼å¿ï¼æ»¡è¶³ä¸ååºç¨é¢åçéæ±ã
è¯è¨ç¹ç¹
ç®åï¼Pythonæ¯ä¸ç§ä»£è¡¨ç®å主ä¹ææ³çè¯è¨ãé 读ä¸ä¸ªè¯å¥½çPythonç¨åºå°±æè§åæ¯å¨è¯»è±è¯ä¸æ ·ãå®ä½¿ä½ è½å¤ä¸æ³¨äºè§£å³é®é¢èä¸æ¯å»ææç½è¯è¨æ¬èº«ã
æå¦ï¼Pythonæå ¶å®¹æä¸æï¼å 为Pythonææå ¶ç®åç说æææ¡£ã
æ读ãæç»´æ¤ï¼é£æ ¼æ¸ æ°åä¸ã强å¶ç¼©è¿ã
é度快ï¼Pythonçåºå±æ¯ç¨Cè¯è¨åçï¼å¾å¤æ ååºå第ä¸æ¹åºä¹é½æ¯ç¨Cåçï¼è¿è¡é度é常快ã
å è´¹ãå¼æºï¼Pythonæ¯FLOSSï¼èªç±ï¼å¼æ¾æºç 软件ï¼ä¹ä¸ã使ç¨è å¯ä»¥èªç±å°åå¸è¿ä¸ªè½¯ä»¶çæ·è´ãé 读å®çæºä»£ç ã对å®åæ¹å¨ãæå®çä¸é¨åç¨äºæ°çèªç±è½¯ä»¶ä¸ãFLOSSæ¯åºäºä¸ä¸ªå¢ä½å享ç¥è¯çæ¦å¿µã
Pythonæ¯ä»ä¹ç¼ç¨è¯è¨ï¼Pythonçåºå±è¯è¨æ¯Cã大å¤æ°é«çº§è¯è¨é½æ¯å¨Cè¯è¨çåºç¡ä¸å¼åçï¼æ¯å¦PythonãJavaãC#â¦â¦ï¼è¿äºçåºå±é½æ¯Cã
Pythonæ¯ä¸ç§å¹¿æ³ä½¿ç¨ç解éåãé«çº§ç¼ç¨ãéç¨åç¼ç¨è¯è¨ï¼ç±åå¤Â·èç½èå§åé ï¼ç¬¬ä¸çåå¸äºå¹´ãå¯ä»¥è§ä¹ä¸ºä¸ç§æ¹è¯çLISPã
Pythonç设计å²å¦å¼ºè°ä»£ç çå¯è¯»æ§åç®æ´çè¯æ³ãç¸æ¯äºC++æè Javaï¼Python让å¼åè è½å¤ç¨æ´å°ç代ç 表达æ³æ³ãä¸ç®¡æ¯å°åè¿æ¯å¤§åç¨åºï¼è¯¥è¯è¨é½è¯å¾è®©ç¨åºçç»ææ¸ æ°æäºã
ä¸SchemeãRubyãPerlãTclçå¨æç±»åç¼ç¨è¯è¨ä¸æ ·ï¼Pythonæ¥æå¨æç±»åç³»ç»ååå¾åæ¶åè½ï¼è½å¤èªå¨ç®¡çå å使ç¨ï¼å¹¶ä¸æ¯æå¤ç§ç¼ç¨èå¼ï¼å æ¬é¢å对象ãå½ä»¤å¼ãå½æ°å¼åè¿ç¨å¼ç¼ç¨ãå ¶æ¬èº«æ¥æä¸ä¸ªå·¨å¤§è广æ³çæ ååºã
Python解éå¨æ¬èº«å ä¹å¯ä»¥å¨ææçæä½ç³»ç»ä¸è¿è¡ãPythonçå ¶ä¸ä¸ä¸ªè§£éå¨CPythonæ¯ç¨Cè¯è¨ç¼åçï¼æ¯ä¸ä¸ªç±ç¤¾ç¾¤é©±å¨çèªç±è½¯ä»¶ï¼å½åç±Python软件åºéä¼ç®¡çã
pythonè¯è¨æ¯ä»ä¹ï¼Pythonæ¯ä¸ç§è®¡ç®æºç¨åºè®¾è®¡è¯è¨ï¼ä½ å¯è½å·²ç»å¬è¯´è¿å¾å¤æµè¡çç¼ç¨è¯è¨ï¼æ¯å¦é常é¾å¦çCè¯è¨ï¼é常æµè¡çJavaè¯è¨ï¼éååå¦è çBasicè¯è¨ï¼éåç½é¡µç¼ç¨çJavaScriptçï¼Pythonå°±æ¯å ¶ä¸ä¹ä¸ã
ç¸å¯¹äºå ¶ä»ç¼ç¨è¯è¨ï¼Pythonå ·æèªå·±ç¬ç¹çä¼å¿ï¼å®å¯ä»¥ç¨æå°ç代ç å®æä»»å¡ãæ¯å¦å®æåä¸ä¸ªä»»å¡ï¼Cè¯è¨è¦åè¡ä»£ç ï¼Javaéè¦è¡ï¼èPythonå¯è½åªéè¦è¡ï¼æ以说Pythonæ¯ä¸é¨é常é«çº§çç¼ç¨è¯è¨ã