ÀµÓºÆ(http://blog.csdn.net/lanphaday) Òë
ÒëÕß°´£ºPython¡¢luaºÍrubyÔÚC/C++ÊÇÈÕ½¥Ê½Î¢µÄÇé¿öÏ£¬ÔÚjava/.netµÄΧ¼ßÖÐŬÁ¦¿¹ÕùµÄÈý¸öµ±ºìСÉú¡£ÔÚTom GutschmidtµÄÖø×÷¡¶Game Programmng with Python, Lua and Ruby¡·Ò»ÊéÖУ¬½éÉÜÁËÈýÖÖÓïÑÔÔÚÓÎÏ·ÖеÄÓ¦Óã¬ÆäÖÐÓÈΪÁ˲»ÆðµÄÊÇÔÚÊéÖÐ×îºóÒ»ÕÂÖбȽÏÁËÈýÖֽű¾£¬×÷ÕßûÓÐ˵ÊëÓÅÊëÁÓ£¬µ«ÊǶÁÕßÄãÈÏΪÄØ£¿»¶ÓÁôÑÔÌÖÂÛ¡£
So which of the three languages is the best to use on your project? That depends a great deal on what you want to accomplish. To wrap up the book, I've outlined some of the pros and cons of each language in this section.
ÕâÈýÖÖÓïÑÔÖеÄÄÄÒ»ÖÖ¸üºÏÊÊÄãµÄÏîÄ¿£¿ºÜ´ó³Ì¶ÈÈ¡¾öÓÚÄãÏë´ïµ½Ê²Ã´ÑùµÄÄ¿±ê¡£×÷ΪһÊéµÄ½á⣬ÔÚÕâÒ»½ÚÀÎÒ»áÃèÊöÒ»ÏÂËüÃǸ÷×ÔµÄÓŵãºÍ²»×ã¡£
Python Pros and Cons
PythonµÄÓŵãºÍ²»×ã
The pros of Python are as follows:
PythonµÄÓŵãÈçÏ£º
· Python has more extension modules than the other languages.
· Python±ÈÆäËü ......
ÆäʵÒì³£¾ÍÊDz»Õý³££¬¾ÍÊDz»ºÍÎÒÃÇÏëÏóÒ»ÑùÈ¥Ö´ÐС£ËüÊÇÒòΪ³ÌÐò³öÏÖÁË´íÎó¶øÔÚÕý³£¿ØÖÆÁ÷ÒÔÍâ²ÉÈ¡µÄÐÐΪ¡£Python³öÏÖÒì³££¬¾ÍÊÇÒòΪ¼ì²éÁËÒ»¸ö´íÎóʱ£¬Python½âÊÍÆ÷ÎÞ·¨¼ÌÐø¼ÌÐøÖ´ÐÐÏÂÈ¥£¬ÕâʱºòÅ׳öÁËÒì³£¡£ÍùÍùÕâ¸ö´íÎó·ÖΪÓï·¨ÉϺÍÂß¼ÉÏ(²»Éó¤Ëµ¸ÅÄ-_-! )£¬¿´¿´¼¸¸öÀý×Ó£¬×ܽáһϣº
1¡¢NameError£º³¢ÊÔ·ÃÎÊÒ»¸öδÉùÃ÷µÄ±äÁ¿
ÈκοɷÃÎʵıäÁ¿±ØÐëÔÚÃû³Æ¿Õ¼äÁгö£¬·ÃÎʱäÁ¿ÐèÒªÓɽâÊÍÆ÷½øÐÐËÑË÷£¬Èç¹ûÇëÇóµÄÃû×ÖûÓÐÔÚÈκÎÃû³Æ¿Õ¼äÀïÕÒµ½£¬ÄÇô½«»áÉú³ÉÒ»¸ö NameErrorÒì³£
2¡¢ZeroDivisionError£º³ýÊýΪÁã
ÈκÎÊýÖµ±»Áã³ý¶¼»áµ¼ÖÂÒ»¸öZeroDivisionErrorµÄÒì³£
3¡¢SyntaxError£ºPython½âÊÍÆ÷Óï·¨´íÎó
SynaxErrorÒì³£ÊÇΨһ²»ÊÇÔÚÔËÐÐʱºò·¢ÉúµÄÒì³££¬Ëü±íʾPython´úÂëÖÐÓв»ÕýÈ·µÄ½á¹¹£¬Òò´ËÎÞ·¨Õý³£Ö´ÐС£ºÜÃ÷ÏÔ£¬Õâ¸ö´íÎóÊÇÔÚ±àÒëʱºò²úÉúµÄ£¬Python½âÊÍÆ÷ÎÞ·¨½«¸Ã½Å±¾×ª»¯ÎªPython×Ö½Ú´úÂë¡£
4¡¢IndexError£ºÇëÇóµÄË÷Òý³¬³öÁËÐòÁз¶Î§
¾ÙÀý×Ó£º
>>> aList = [1 ,3]
>>> aList[0]
1
>>> aList[1]
3
>>> aList[2]
Traceback (most recent call last):
File "", line 1, in
IndexError: list index out of range
5¡¢KeyError£ºÇëÇóÒ»¸ö²»´æÔÚµÄ ......
def getText(self,nodelist):
rc=""
for node in nodelist:
if node.nodeType == node.TEXT_NODE or node.nodeType == node.CDATA_SECTION_NODE:
rc = rc + node.data
return rc
def parseXML(self,requesturl,xml):
dom = minidom.parse(requesturl)
for node in dom.getElementsByTagName('category'):
xml.append({
'categoryid': self.getText(node.getElementsByTagName("categoryid")[0].childNodes),
'categoryname': self.getText(node.getElementsByTagName("categoryname")[0].childNodes)
})
Ö÷º¯Êý£º
xml=[]
self.parseXML(self.file_path,xml) ......
def getText(self,nodelist):
rc=""
for node in nodelist:
if node.nodeType == node.TEXT_NODE or node.nodeType == node.CDATA_SECTION_NODE:
rc = rc + node.data
return rc
def parseXML(self,requesturl,xml):
dom = minidom.parse(requesturl)
for node in dom.getElementsByTagName('category'):
xml.append({
'categoryid': self.getText(node.getElementsByTagName("categoryid")[0].childNodes),
'categoryname': self.getText(node.getElementsByTagName("categoryname")[0].childNodes)
})
Ö÷º¯Êý£º
xml=[]
self.parseXML(self.file_path,xml) ......
urllibÄ£¿éÌṩµÄÉϲã½Ó¿Ú£¬Ê¹ÎÒÃÇ¿ÉÒÔÏñ¶ÁÈ¡±¾µØÎļþÒ»Ñù¶ÁÈ¡wwwºÍftpÉϵÄÊý¾Ý¡£Ã¿µ±Ê¹ÓÃÕâ¸öÄ£¿éµÄʱºò£¬ÀÏÊÇ»áÏëÆð¹«Ë¾²úÆ·µÄ¿Í»§¶Ë£¬Í¬ÊÂÓÃC++ÏÂÔØWebÉϵÄͼƬ£¬ÄÇÖÖ“Í´¿à”µÄ±íÇé¡£ÎÒÒÔÇ°·Òë¹ýlibcurl½Ì³Ì£¬ÕâÊÇÔÚC/C++»·¾³Ï±ȽϷ½±ãʵÓõÄÍøÂç²Ù×÷¿â£¬Ïà±ÈÆðlibcurl£¬PythonµÄurllibÄ£¿éµÄʹÓÃÃż÷ÔòµÍ¶àÁË¡£¿ÉÄÜÓÐЩÈËÓÖ»áÓÃЧÂÊÀ´ÅúÆÀPython£¬ÆäʵÔÚ²Ù×÷ÍøÂ磬»òÕßÔÚ¼¯Èº½»»¥µÄʱºò£¬ ÓïÑÔµÄÖ´ÐÐЧÂʾø²»ÊÇÆ¿¾±¡£ÕâÖÖÇé¿öÏ£¬Ò»¸ö±È½ÏºÃµÄ·½·¨ÊÇ£¬½«pythonǶÈëµ½C/C++ÖУ¬ÈÃPythonÀ´Íê³ÉһЩ²»ÊǺËÐĵÄÂß¼´¦Àí¡£ÓÖ³¶Ô¶ÁË£¬·Ï»°ÉÙ˵£¬¿ªÊ¼urllibÖ®ÂðÉ~~ £¨Ç°¼¸ÌìÎÒÓÃÕâ¸öÄ£¿éдÁ˸öÖ©Ö룬¸ÐÐËȤµÄͬѧ¿ÉÒÔÔÚÒÔÇ°µÄ²©¿ÍÖÐÕÒµ½´úÂ룩
ÏÈ¿´Ò»¸öÀý×Ó£¬Õâ¸öÀý×Ó°ÑGoogleÊ×Ò³µÄhtmlץȡÏÂÀ´²¢ÏÔʾÔÚ¿ØÖÆ̨ÉÏ£º
# ±ð¾ªÑÈ£¬Õû¸ö³ÌÐòȷʵֻÓÃÁËÁ½ÐдúÂë
import urllib
print urllib.urlopen('http://www.google.com').read()
urllib.urlopen(url[, data[, proxies]]) :
´´½¨Ò»¸ö±íʾԶ³ÌurlµÄÀàÎļþ¶ÔÏó£¬È»ºóÏñ±¾µØÎļþÒ»Ñù²Ù×÷Õâ¸öÀàÎļþ¶ÔÏóÀ´»ñÈ¡Ô¶³ÌÊý¾Ý¡£²ÎÊýurl±íʾԶ³ÌÊý¾ÝµÄ·¾¶ ......
ÀµÓºƣ¨http://laiyonghao.com£©
¹Ø¼ü×Ö£ºpython, easy_install, setuptools, myentunnel, polipo, windows, linux, socks5, http, proxy
ÒòΪһЩÖÚËùÖÜÖªµÄÔÒò£¬ÎÒÃÇÓÐЩÍøÕ¾ÎÞ·¨·ÃÎÊ£¬Ôì³ÉÉú»îºÍÉú²úµÄ¾Þ´ó²»±ã¡£ÆäÖжÔÎÒÓ°Ïì±È½Ï´óµÄÒ»¸ö¾ÍÊÇ°²×°Ä³Ð© Python Ä£¿éµÄʱºò£¬easy_install ÎÞ·¨·ÃÎʵ½ÍøÕ¾¡£ÔÚÕâÀï·ÖÏíÈà easy_install ʹÓôúÀíµÄ·½·¨£¬Èç¹ûÄãÓµÓÐ socks5 »ò http ´úÀí·þÎñÆ÷¿ÉÓã¬Õâ¸ö·½·¨Äܹ»Èà easy_install ÍêÃÀµØ¿çÔ½³¤³Ç¡£
http
Ê×ÏȽéÉÜÈÝÒ×ʵÏÖµÄ http ·½Ê½¡£µÃÒæÓÚ python Ä£¿é urllib Äܹ»Í¸Ã÷ʹÓôúÀíµÄÄܹ»£¬easy_install ʹÓà http ´úÀíÊǷdz£·½Ê½µÄ¡£ÎÞÂÛÔÚ windows »¹ linux Ï£¬Ö»ÒªÉèÖúà http_proxy »·¾³±äÁ¿¾Í¿ÉÒÔÁË¡£
Äã¿ÉÒÔÔÚ windows ÃüÁîÐÐÖ´ÐУºset HTTP_PROXY=http://your.proxy.com:yourPort »òÔÚ linux ÏÂÖ´ÐУºexport HTTP_PROXY="http://your.proxy.com:yourPort"£¬È»ºóÔÙÖ´ÐÐ easy_install ¼´¿É¡£
socks5
ÓÉÓÚÄǵÀǽµÄ´æÔÚ£¬Ðí¶àÈËÊÇͨ¹ý VPS µÄ SSH ·Ç½µÄ£¬ÔÚ windows ϳ£ÓõÄÒ»¸öÈí¼þÊÇ myentunnel£¬ËüÄܹ»Ìṩ socks5 ´úÀí·þÎñ¡£¿Éϧ easy_install ûÓа취ֱ½ÓʹÓà socks5 ´úÀí£¬ËùÒÔÐèÒªÒ»¸öÈí¼þÀ´°Ñ ......
ÓÉÓÚ¹¤×÷ÐèÒª£¬ÓÖҪѧϰеĿª·¢ÓïÑÔ-Python£¬ ÓïÑÔѧ¹ý¼¸ÖÖÁË£¬ ¸Ð¾õ»¹ÊÇÓкöàÏàËƵĵط½£¬ Õâ¸öPython¸Ð¾õ¾Í¸úJavaÓкöàÏàͨµÄµØ·½£¬ Ê×ÏÈÄã¿ÉÒÔÔÚEclipseÉÏͨ¹ýÅäÖúóÀ´¿ª·¢Python¡£ÕâÀïÎÒÌý´ÓÁËÀÏ´óµÄ½¨Ò飬ÅäÖÃÁËÒ»¸öFlexBuilder ×÷ΪPythonµÄIDE½øÐпª·¢¡£
Ä¿Ç°¸Õ¿ªÊ¼Ñ§Ï°PythonµÄ»ù±¾Óï·¨£¬ ½ñÌìÖ÷Òª¿´ÁËÒ»ÏÂPythonµÄÄÚÖÃÊý¾Ý±äÁ¿£º
Ôª×飺 Õâ¸öÀàËÆÓÚJavaÀïÃæµÄarrayÊý×飬 ËäȻ˵ÔÚPythonÀïÃæÒ»ÇнÔÊǶÔÏ󣬲»»áÓÐÕâÖÖÖµ±äÁ¿µÄ´æÔÚ£¬µ«ÊÇÕâÀïµÄÔª×éÓ¦¸Ã˵¿ÉÒÔ¿´×öÒ»¸öÖµ±äÁ¿£¬ ¿ÉÒÔ½øÐвéÕÒ£¨¸ù¾Ýindex£©£¬µ«ÊDz»ÄܽøÐÐÌí¼Ó¡¢É¾³ýµÄ²Ù×÷¡£»¹ÓÐÕâ¸öPythonÀïÃæµÄÔª×é´æÔÚÒ»¸öºÜÓÐÒâ˼µÄ¹¦ÄܾÍÊÇ¿ÉÒÔÓøºµÄË÷ÒýÖµ²éѯ£¬±ÈÈça¡¾-1¡¿£¬ »¹ÓоÍÊDzéѯƬ¶ÎµÈ²Ù×÷
ÁÐ±í£º Õâ¸öÓ¦¸Ã˵ÊÇÀàËÆÓÚJavaÀïÃæµÄArrayList¿ÉÒÔ½øÐвéÕÒ£¬ÅÅÐò£¬·´×ª£¬ ¿ÉÒÔʹÓÃÁбíÀ´ÊµÏÖ¶ÑÕ»¡¢¶ÓÁÐ
×ֵ䣺 ÀàËÆÓÚJavaÀïÃæHashMap£¬ ²Ù×÷Ò²ÊÇ»ù±¾ÀàËÆ£¬ ÌرðÊÇPythonÀïÒ²ÓÐJavaÀïÃæµÄÉ±´£¬Ç³¿½±´²Ù×÷£¬·Ö±ðÓÃcopy()¡¢deepcopy()ʵÏÖ¡£
pythonµÄÄ£¿éÓ뺯Êý¸úJava£¬c++Ïà²î²»´ó£¬ ±È½ÏÌرðµÄµØ·½Ö÷ÒªÓÐÁ½¸öµØ·½£º
lambda: ÀàËÆÓÚC++ÀïµÄºêº¯Êý£¬ Æä¸ñʽΪ£ºlambda var1,var2....:±í´ïʽ£¬ ÀýÈ ......