±à¼ÍƼö: |
±¾ÎÄΪ¹È¸è¹Ù·½³öÆ·µÄPython±àÂë¹æ·¶£¬Ï£Íû¶Ô¸÷λPython¿ª·¢ÕßÓÐÒæ¡£
±¾ÎÄÀ´×ÔÓÚ21CTO£¬ÓÉ»ðÁú¹ûÈí¼þÒÀÈ»±à¼¡¢ÍƼö¡£ |
|

GoogleµÄPython±àÂë¹æ·¶
±³¾°
PythonÊÇGoogle¹«Ë¾Ö÷ҪʹÓõĽű¾ÓïÑÔ¡£Õâ±¾·ç¸ñÖ¸ÄÏÖ÷Òª°üº¬µÄÊÇÕë¶ÔPythonµÄ±à³Ì¹æ·¶¡£
²»ÒÔ¹æ¾Ø²»³É·½Ô²£¬¹æ·¶×ÔÈ»ÊÇÊ®·ÖÖØÒªµÄ£¬¶øÔÚ¶¯Ì¬ÓïÑÔÖУ¬ÓÈÆäÖØÒª£¨ºÜ¶àÈËÄÃPythonд½Å±¾£¬»ù±¾ÊÇËæÐÄËùÓûµØÐ´£¬×ÔÈ»ºóÆÚά»¤À§ÄÑ£©¡£Ëùν¡º±øÂíδ¶¯Á¸²ÝÏÈÐС»£¬ÎÒÃÇÓ¦¸ÃÔÚд´úÂëǰ£¬¾Í×öºÃ³ä×ãµÄ
¡°±íÃæ¹¦·ò¡±¡£
²»ÃÔÐÅȨÍþ£¬ÕâÀïÖ¸Google Python Guide£¬½öÊÇÊʺÏGoogleµÄ¹æ·¶£¬²¢²»ÊÇÉçÇø¹æ·¶£¬¸÷λ¿ÉÒÔ×ÔÐнøÐй淶¼ô²Ã¡£
Ϊ°ïÖú¶ÁÕßÄܹ»½«´úÂë׼ȷ¸ñʽ»¯£¬ÎÒÃÇÌṩÁËÕë¶ÔµÄVimµÄÅäÖÃÎļþ¡£¶ÔÓÚEmacsµÄÓû§£¬¿ÉÒÔ±£³ÖĬÈÏÉèÖü´¿É¡£
Lint
Ìáʾ
¶ÔÄãµÄPython´úÂëÔËÐÐpylint¡£
¶¨Òå:
pylintÊÇÒ»¸öÔÚPythonÔ´´úÂëÖвéÕÒbugµÄ¹¤¾ß¡£¶ÔÓÚCºÍC++ÕâÑùµÄ²»ÄÇô¶¯Ì¬µÄÓïÑÔ(ÒëÕß×¢:
ÔÎÄÊÇless dynamic) £¬ÕâЩbugͨ³£ÓɱàÒëÆ÷À´²¶»ñ¡£ÓÉÓÚPythonµÄ¶¯Ì¬ÓïÑÔÌØÐÔ£¬ÓÐЩ¾¯¸æÌáʾ¿ÉÄܲ»¶Ô£¬²»¹ýα¸æ¾¯Ó¦¸Ã»á±È½ÏÉÙ¡£
Óŵã:
¿ÉÒÔ²¶»ñÈÝÒ׺öÊӵĴíÎó£¬ÀýÈçÊäÈë´íÎó£¬Ê¹ÓÃδ¸³ÖµµÄ±äÁ¿µÈ¡£
ȱµã:
pylint²¢²»ÍêÃÀ¡£ÒªÀûÓÃÆäÓÅÊÆ£¬ÎÒÃÇÓÐʱºîÐèÒª£º
a) Î§ÈÆ×ÅËüÀ´Ð´´úÂ룻
b) ÒÖÖÆÆä¸æ¾¯£»
c) ¸Ä½øËü»òÕߺöÂÔËü¡£
½áÂÛ:
È·±£¶ÔÄãµÄ´úÂëÔËÐÐpylint£¬ÒÖÖÆ²»×¼È·µÄ¾¯¸æÌáʾ£¬ÒÔ±ãÄܹ»½«ÆäËû¾¯¸æ±©Â¶³öÀ´¡£
ÎÒÃÇ¿ÉÒÔͨ¹ýÉèÖÃÒ»¸öÐÐ×¢ÊÍÀ´ÒÖÖÆ¸æ¾¯£¬ÀýÈçÈçÏ´úÂë:
dict = 'something
awful'
# Bad Idea... pylint: disable=redefined-builtin |
pylintµÄ¾¯¸æ·Ö±ðÊÇÒÔÒ»¸öÊý×Ö±àºÅ(ÈçC0112)ºÍÒ»¸ö·ûºÅÃû³Æ(Èçempty-docstring)À´½øÐбêʶµÄ¡£ÔÚ±àддúÂë»ò¸üÐÂÒÑÓдúÂëʱ¶Ô¸æ¾¯½øÐÐÕï¶Ï£¬ÍƼöʹÓ÷ûºÅÃûÀ´±êʶ¡£
Èç¹û¾¯¸æµÄ·ûºÅÃû²»¹»¼ûÃûʶÒ⣬ÄÇôÇë¶ÔÆäÔö¼ÓÒ»¸öÏêϸ½âÊÍ¡£²ÉÓÃÕâÖÖÒÖÖÆ·½Ê½µÄºÃ´¦ÊÇÎÒÃÇ¿ÉÒÔÇáËɲéÕÒÒÖÖÆ²¢»Ø¹ËËüÃÇ¡£
Äã¿ÉÒÔʹÓÃÃüÁîÀ´»ñÈ¡pylint¸æ¾¯ÁÐ±í£¬¿ÉÒÔʹÓÃÃüÁÒÔ»ñÈ¡¹ØÓÚÌØ¶¨ÏûÏ¢µÄ¸ü¶àÐÅÏ¢¡£ÈçÏ£º
pylint --list-msgspylint --help-msg=C6409
Ïà±È½ÏÓÚ֮ǰʹÓõIJÎÊý£¬±¾ÎÄÍÆ¼öʹÓÃÈçϲÎÊý£º
pylint: disable-msgpylint: disable
ÒªÒÖÖÆ¡±²ÎÊýδʹÓᱸ澯£¬Äã¿ÉÒÔÓá±_¡±×÷Ϊ²ÎÊý±êʶ·û£¬»òÕßÔÚ²ÎÊýÃûǰ¼Ó¡±unused_¡±.
Óöµ½²»Äܸıä²ÎÊýÃûµÄÇé¿ö£¬Äã¿ÉÒÔͨ¹ýÔÚº¯Êý¿ªÍ·¡±Ìáµ½¡±ËüÃÇÀ´Ïû³ý¸æ¾¯¡£ÀýÈç:
def foo ( a
, unused_b , unused_c , d = None , e = None ):
_ = d , e
return a |
µ¼Èë
Ìáʾ
ÔÚ¿ª·¢ÖУ¬½ö¶Ô°üºÍÄ£¿éʹÓõ¼Èë²Ù×÷¡£
¶¨Òå:
Ä£¿é¼ä¹²Ïí´úÂëµÄÖØÓûúÖÆ¡£
Óŵã:
ÃüÃû¿Õ¼ä¹ÜÀíÔ¼¶¨Ê®·Ö¼òµ¥¡£Ã¿¸ö±êʶ·ûµÄÔ´¶¼ÓÃÒ»ÖÖÒ»Öµķ½Ê½Ö¸Ê¾¡£x.Obj±íʾObj¶ÔÏñ¶¨ÒåÔÚÄ£¿éxÖС£
ȱµã:
Ä£¿éÃûÈÔ¿ÉÄܳåÍ»¡£ÓÐЩģ¿éÃûÌ«³¤£¬²»Ì«·½±ã¡£
½áÂÛ:
ʹÓÃÀ´µ¼Èë°üºÍÄ£¿é£º
import x
ÕâÑùÀ´Ê¹Óã¬ÆäÖÐxÊǰüǰ׺, yÊDz»´øÇ°×ºµÄÄ£¿éÃû¡£
from x import y
ʹÓÃ,Èç¹ûÁ½¸öÒªµ¼ÈëµÄÄ£¿é¶¼½Ð×öz»òÕßyÌ«³¤ÁË¡£
from x import y as z
ÀýÈ磬ģ¿é
sound.effects.echo
¿ÉÒÔÓÃÈçÏ·½Ê½µ¼È룺
from sound.effects
import echo
...
echo . EchoFilter ( input , output , delay = 0.7
, atten = 4 ) |
µ¼Èëʱ²»ÒªÊ¹ÓÃÏà¶ÔÃû³Æ. ¼´Ê¹Ä£¿éÔÚͬһ¸ö°üÖУ¬Ò²ÒªÊ¹ÓÃÍêÕû°üÃû¡£ÕâÄܰïÖúÄã±ÜÃâÎÞÒâ¼äµ¼ÈëÒ»¸ö°üÁ½´Î¡£
°ü
Ìáʾ
ʹÓÃÄ£¿éµÄȫ·¾¶ÃûÀ´µ¼Èëÿ¸öÄ£¿é¡£
Óŵã:
±ÜÃâÄ£¿éÃû³Æ³åÍ»£¬²éÕÒ°üÒ²¸ü¼ÓÈÝÒס£
ȱµã:
²¿Êð´úÂë±äµÃÀ§ÄÑ£¬ÒòΪÄã±ØÐë¸´ÖÆ°ü²ã´Î¡£
½áÂÛ:
ËùÓеÄдúÂë¶¼Ó¦¸ÃÓÃÍêÕû°üÃûÀ´µ¼Èëÿ¸öÄ£¿é¡£Ó¦¸ÃÏñÏÂÃæ´úÂëÕâÑùµ¼È룺
# Reference
in code with complete name.
import sound.effects.echo
# Reference in code with just module name (preferred).
from sound.effects import echo |
Òì³£
Ìáʾ
ÔÊÐíʹÓÃÒì³££¬µ«±ØÐëҪʮ·ÖСÐÄ¡£
¶¨Òå:
Òì³£ÊÇÒ»ÖÖÌø³ö´úÂë¿éµÄÕý³£¿ØÖÆÁ÷À´´¦Àí´íÎó»òÕ߯äËüÒì³£Ìõ¼þµÄ·½Ê½.
Óŵã:
Õý³£²Ù×÷´úÂëµÄ¿ØÖÆÁ÷²»»áºÍ´íÎó´¦Àí´úÂë»ìÔÚÒ»Æð. µ±Ä³ÖÖÌõ¼þ·¢Éúʱ, ËüÒ²ÔÊÐí¿ØÖÆÁ÷Ìø¹ý¶à¸ö¿ò¼Ü.
ÀýÈç, Ò»²½Ìø³öN¸öǶÌ׵ĺ¯Êý, ¶ø²»±Ø¼ÌÐøÖ´ÐдíÎóµÄ´úÂë.
ȱµã:
¿ÉÄܻᵼÖÂÈÃÈËÀ§»óµÄ¿ØÖÆÁ÷. µ÷ÓÿâʱÈÝÒ×´í¹ý´íÎóÇé¿ö.
½áÂÛ:
Òì³£±ØÐë×ñÊØÌØ¶¨Ìõ¼þ:
1.ÏñÕâÑù´¥·¢Òì³£: »òÕß.²»ÒªÊ¹ÓÃÁ½¸ö²ÎÊýµÄÐÎʽ( )»òÕß¹ýʱµÄ×Ö·û´®Òì³£( ).
raise MyException("Error message")raise
MyExceptionraise MyException, "Error message"raise
"Error message"
2.Ä£¿é»ò°üÓ¦¸Ã¶¨Òå×Ô¼ºµÄÌØ¶¨ÓòµÄÒì³£»ùÀà, Õâ¸ö»ùÀàÓ¦¸Ã´ÓÄÚ½¨µÄExceptionÀà¼Ì³Ð. Ä£¿éµÄÒì³£»ùÀàÓ¦¸Ã½Ð×ö¡±Error¡±.
class Error ( Exception ):
pass
3.ÓÀÔ¶²»ÒªÊ¹ÓÃexcept:Óï¾äÀ´²¶»ñËùÓÐÒì³£,Ò²²»Òª²¶»ñException»òÕßStandardError,³ý·ÇÄã´òËãÖØÐ´¥·¢¸ÃÒì³£,»òÕßÄãÒѾÔÚµ±Ç°Ï̵߳Ä×îÍâ²ã(¼ÇµÃ»¹ÊÇÒª´òÓ¡Ò»Ìõ´íÎóÏûÏ¢).ÔÚÒì³£Õâ·½Ãæ,
Python·Ç³£¿íÈÝ, except:ÕæµÄ»á²¶»ñ°üÀ¨PythonÓï·¨´íÎóÔÚÄÚµÄÈκδíÎó.ʹÓÃexcept:ºÜÈÝÒ×Òþ²ØÕæÕýµÄbug.
4.¾¡Á¿¼õÉÙtry/except¿éÖеĴúÂëÁ¿. try¿éµÄÌå»ýÔ½´ó, ÆÚÍûÖ®ÍâµÄÒì³£¾ÍÔ½ÈÝÒ×±»´¥·¢.
ÕâÖÖÇé¿öÏÂ, try/except¿é½«Òþ²ØÕæÕýµÄ´íÎó.
5.ʹÓÃfinally×Ó¾äÀ´Ö´ÐÐÄÇЩÎÞÂÛtry¿éÖÐÓÐûÓÐÒì³£¶¼Ó¦¸Ã±»Ö´ÐеĴúÂë. Õâ¶ÔÓÚÇåÀí×ÊÔ´³£³£ºÜÓÐÓÃ,
ÀýÈç¹Ø±ÕÎļþ.
6.µ±²¶»ñÒ쳣ʱ,ʹÓÃas¶ø²»ÒªÓöººÅ.ÀýÈ磺
try :
aise Error
except Error as error :
pass |
È«¾Ö±äÁ¿
Ìáʾ
±ÜÃâʹÓÃÈ«¾Ö±äÁ¿¡£
¶¨Òå:
¶¨ÒåÔÚÄ£¿é¼¶µÄ±äÁ¿.
Óŵã:
ż¶ûÓÐÓÃ.
ȱµã:
µ¼Èëʱ¿ÉÄܸıäÄ£¿éÐÐΪ, ÒòΪµ¼ÈëÄ£¿éʱ»á¶ÔÄ£¿é¼¶±äÁ¿¸³Öµ.
½áÂÛ:
±ÜÃâʹÓÃÈ«¾Ö±äÁ¿, ÓÃÀà±äÁ¿À´´úÌæ£¬µ«Ò²ÓÐһЩÀýÍâ:
1£©½Å±¾µÄĬÈÏÑ¡Ïî.
2£©Ä£¿é¼¶³£Á¿. ÀýÈç: PI = 3.14159. ³£Á¿Ó¦¸ÃÈ«´óд, ÓÃÏ»®ÏßÁ¬½Ó.
3£©ÓÐʱºòÓÃÈ«¾Ö±äÁ¿À´»º´æÖµ»òÕß×÷Ϊº¯Êý·µ»ØÖµºÜÓÐÓÃ.
4£©Èç¹ûÐèÒª, È«¾Ö±äÁ¿Ó¦¸Ã½öÔÚÄ£¿éÄÚ²¿¿ÉÓÃ, ²¢Í¨¹ýÄ£¿é¼¶µÄ¹«¹²º¯ÊýÀ´·ÃÎÊ.
ǶÌ×/¾Ö²¿/ÄÚ²¿Àà»òº¯Êý
Ìáʾ
¹ÄÀøÊ¹ÓÃǶÌ×/±¾µØ/ÄÚ²¿Àà»òº¯Êý
¶¨Òå:
Àà¿ÉÒÔ¶¨ÒåÔÚ·½·¨, º¯Êý»òÕßÀàÖÐ. º¯Êý¿ÉÒÔ¶¨ÒåÔÚ·½·¨»òº¯ÊýÖÐ. ·â±ÕÇø¼äÖж¨ÒåµÄ±äÁ¿¶ÔǶÌ׺¯ÊýÊÇÖ»¶ÁµÄ.
Óŵã:
ÔÊÐí¶¨Òå½öÓÃÓÚÓÐЧ·¶Î§µÄ¹¤¾ßÀàºÍº¯Êý.
ȱµã:
ǶÌ×Àà»ò¾Ö²¿ÀàµÄʵÀý²»ÄÜÐòÁл¯(pickled).
½áÂÛ:
ÍÆ¼öʹÓÃ.
ÁбíÍÆµ¼(List Comprehensions)
¿ÉÒÔÔÚ¼òµ¥Çé¿öÏÂʹÓá£
¶¨Òå:
ÁбíÍÆµ¼(list comprehensions)ÓëÉú³ÉÆ÷±í´ïʽ(generator expression)ÌṩÁËÒ»ÖÖ¼ò½à¸ßЧµÄ·½Ê½À´´´½¨ÁбíºÍµü´úÆ÷,
¶ø²»±Ø½èÖúmap(), filter(), »òÕßlambda.
Óŵã:
¼òµ¥µÄÁбíÍÆµ¼¿ÉÒÔ±ÈÆäËüµÄÁÐ±í´´½¨·½·¨¸ü¼ÓÇåÎú¼òµ¥. Éú³ÉÆ÷±í´ïʽ¿ÉÒÔÊ®·Ö¸ßЧ, ÒòΪËüÃDZÜÃâÁË´´½¨Õû¸öÁбí.
ȱµã:
¸´ÔÓµÄÁбíÍÆµ¼»òÕßÉú³ÉÆ÷±í´ïʽ¿ÉÄÜÄÑÒÔÔĶÁ.
½áÂÛ:
ÊÊÓÃÓÚ¼òµ¥Çé¿ö. ÿ¸ö²¿·ÖÓ¦¸Ãµ¥¶ÀÖÃÓÚÒ»ÐÐ: Ó³Éä±í´ïʽ, forÓï¾ä,
¹ýÂËÆ÷±í´ïʽ. ½ûÖ¹¶àÖØforÓï¾ä»ò¹ýÂËÆ÷±í´ïʽ. ¸´ÔÓÇé¿öÏ»¹ÊÇʹÓÃÑ»·.
Yes :
result = []
for x in range ( 10 ):
for y in range ( 5 ):
if x * y > 10 :
result . append (( x , y ))
for x in xrange ( 5 ):
for y in xrange ( 5 ):
if x != y :
for z in xrange ( 5 ):
if y != z :
yield ( x , y , z )
return (( x , complicated_transform ( x ))
for x in long_generator_function ( parameter
)
if x is not None )
squares = [ x * x for x in range ( 10 )]
eat ( jelly_bean for jelly_bean in jelly_beans
if jelly_bean . color == 'black' )
No :
result = [( x , y ) for x in range ( 10 ) for
y in range ( 5 ) if x * y > 10 ]
return (( x , y , z )
for x in xrange ( 5 )
for y in xrange ( 5 )
if x != y
for z in xrange ( 5 )
if y != z ) |
ĬÈϵü´úÆ÷ºÍ²Ù×÷·û
Èç¹ûÀàÐÍÖ§³Ö, ¾ÍʹÓÃĬÈϵü´úÆ÷ºÍ²Ù×÷·û. ±ÈÈçÁбí, ×ֵ估ÎļþµÈ¡£
¶¨Òå:
ÈÝÆ÷ÀàÐÍ, Ïñ×ÖµäºÍÁбí, ¶¨ÒåÁËĬÈϵĵü´úÆ÷ºÍ¹ØÏµ²âÊÔ²Ù×÷·û(inºÍnot in)
Óŵã:
ĬÈϲÙ×÷·ûºÍµü´úÆ÷¼òµ¥¸ßЧ, ËüÃÇÖ±½Ó±í´ïÁ˲Ù×÷, ûÓжîÍâµÄ·½·¨µ÷ÓÃ. ʹÓÃĬÈϲÙ×÷·ûµÄº¯ÊýÊÇͨÓõÄ.
Ëü¿ÉÒÔÓÃÓÚÖ§³Ö¸Ã²Ù×÷µÄÈκÎÀàÐÍ.
ȱµã:
Äãû·¨Í¨¹ýÔĶÁ·½·¨ÃûÀ´Çø·Ö¶ÔÏóµÄÀàÐÍ(ÀýÈç, has_key()Òâζ×Å×Öµä). ²»¹ýÕâÒ²ÊÇÓŵã.
½áÂÛ:
Èç¹ûÀàÐÍÖ§³Ö, ¾ÍʹÓÃĬÈϵü´úÆ÷ºÍ²Ù×÷·û, ÀýÈçÁбí, ×ÖµäºÍÎļþ.
ÄÚ½¨ÀàÐÍÒ²¶¨ÒåÁ˵ü´úÆ÷·½·¨. ÓÅÏÈ¿¼ÂÇÕâЩ·½·¨, ¶ø²»ÊÇÄÇЩ·µ»ØÁбíµÄ·½·¨. µ±È»£¬ÕâÑù±éÀúÈÝÆ÷ʱ£¬Ä㽫²»ÄÜÐÞ¸ÄÈÝÆ÷¡£
Yes : for key
in adict : ...
if key not in adict : ...
if obj in alist : ...
for line in afile : ...
for k , v in dict . iteritems (): ...
No : for key in adict . keys (): ...
if not adict . has_key ( key ): ...
for line in afile . readlines (): ...
|
Éú³ÉÆ÷
°´ÐèʹÓÃÉú³ÉÆ÷¡£
¶¨Òå:
ËùνÉú³ÉÆ÷º¯Êý, ¾ÍÊÇÿµ±ËüÖ´ÐÐÒ»´ÎÉú³É(yield)Óï¾ä, Ëü¾Í·µ»ØÒ»¸öµü´úÆ÷, Õâ¸öµü´úÆ÷Éú³ÉÒ»¸öÖµ.
Éú³ÉÖµºó, Éú³ÉÆ÷º¯ÊýµÄÔËÐÐ״̬½«±»¹ÒÆð, Ö±µ½ÏÂÒ»´ÎÉú³É.
Óŵã:
¼ò»¯´úÂë, ÒòΪÿ´Îµ÷ÓÃʱ, ¾Ö²¿±äÁ¿ºÍ¿ØÖÆÁ÷µÄ״̬¶¼»á±»±£´æ. ±ÈÆðÒ»´Î´´½¨Ò»ÏµÁÐÖµµÄº¯Êý, Éú³ÉÆ÷ʹÓõÄÄÚ´æ¸üÉÙ.
ȱµã:
ûÓÐ.
½áÂÛ:
¹ÄÀøÊ¹ÓÃ. ×¢ÒâÔÚÉú³ÉÆ÷º¯ÊýµÄÎĵµ×Ö·û´®ÖÐʹÓá±Yields:¡±¶ø²»ÊÇ¡±Returns:¡±.
Lambdaº¯Êý
ÊÊÓÃÓÚµ¥Ðк¯Êý¡£
¶¨Òå:
ÓëÓï¾äÏà·´, lambdaÔÚÒ»¸ö±í´ïʽÖж¨ÒåÄäÃûº¯Êý.³£ÓÃÓÚΪmap()ºÍfilter()Ö®ÀàµÄ¸ß½×º¯Êý¶¨Ò廨µ÷º¯Êý»òÕß²Ù×÷·û.
Óŵã:
·½±ã.
ȱµã:
±È±¾µØº¯Êý¸üÄÑÔĶÁºÍµ÷ÊÔ. ûÓк¯ÊýÃûÒâζ×ŶÑÕ»¸ú×Ù¸üÄÑÀí½â. ÓÉÓÚlambdaº¯Êýͨ³£Ö»°üº¬Ò»¸ö±í´ïʽ,
Òò´ËÆä±í´ïÄÜÁ¦ÓÐÏÞ.
½áÂÛ:
ÊÊÓÃÓÚµ¥Ðк¯Êý. Èç¹û´úÂ볬¹ý60-80¸ö×Ö·û, ×îºÃ»¹ÊǶ¨Òå³É³£¹æ(ǶÌ×)º¯Êý.
¶ÔÓÚ³£¼ûµÄ²Ù×÷·û£¬ÀýÈç³Ë·¨²Ù×÷·û£¬Ê¹ÓÃoperatorÄ£¿éÖеĺ¯ÊýÒÔ´úÌælambdaº¯Êý.ÀýÈç,ÍÆ¼öʹÓÃoperator.mul,¶ø²»ÊÇ.lambda
x, y: x * y
Ìõ¼þ±í´ïʽ
ÊÊÓÃÓÚµ¥Ðк¯Êý¡£
¶¨Òå:
Ìõ¼þ±í´ïʽÊǶÔÓÚifÓï¾äµÄÒ»ÖÖ¸üΪ¼ò¶ÌµÄ¾ä·¨¹æÔò.ÀýÈç: .x = 1 if cond else
2
Óŵã:
±ÈifÓï¾ä¸ü¼Ó¼ò¶ÌºÍ·½±ã.
ȱµã:
±ÈifÓï¾äÄÑÓÚÔĶÁ. Èç¹û±í´ïʽºÜ³¤£¬ ÄÑÓÚ¶¨Î»Ìõ¼þ.
½áÂÛ:
ÊÊÓÃÓÚµ¥Ðк¯Êý. ÔÚÆäËûÇé¿öÏ£¬ÍƼöʹÓÃÍêÕûµÄifÓï¾ä¡£
ĬÈϲÎÊýÖµ
ÊÊÓÃÓڴ󲿷ÖÇé¿ö¡£
¶¨Òå:
Äã¿ÉÒÔÔÚº¯Êý²ÎÊýÁбíµÄ×îºóÖ¸¶¨±äÁ¿µÄÖµ,ÀýÈç, .Èç¹ûµ÷ÓÃfooʱֻ´øÒ»¸ö²ÎÊý,Ôòb±»ÉèΪ0.Èç¹û´øÁ½¸ö²ÎÊý,ÔòbµÄÖµµÈÓÚµÚ¶þ¸ö²ÎÊý.def
foo(a, b = 0):
Óŵã:
Äã¾³£»áÅöµ½Ò»Ð©Ê¹ÓôóÁ¿Ä¬ÈÏÖµµÄº¯Êý, µ«Å¼¶û(±È½ÏÉÙ¼û)ÄãÏëÒª¸²¸ÇÕâЩĬÈÏÖµ. ĬÈϲÎÊýÖµÌṩÁËÒ»ÖÖ¼òµ¥µÄ·½·¨À´Íê³ÉÕâ¼þÊÂ,
Äã²»ÐèҪΪÕâЩº±¼ûµÄÀýÍⶨÒå´óÁ¿º¯Êý. ͬʱ, PythonÒ²²»Ö§³ÖÖØÔØ·½·¨ºÍº¯Êý, ĬÈϲÎÊýÊÇÒ»ÖÖ¡±·ÂÔì¡±ÖØÔØÐÐΪµÄ¼òµ¥·½Ê½.
ȱµã:
ĬÈϲÎÊýÖ»ÔÚÄ£¿é¼ÓÔØÊ±ÇóÖµÒ»´Î. Èç¹û²ÎÊýÊÇÁбí»ò×ÖµäÖ®ÀàµÄ¿É±äÀàÐÍ, Õâ¿ÉÄܻᵼÖÂÎÊÌâ. Èç¹ûº¯ÊýÐÞ¸ÄÁ˶ÔÏó(ÀýÈçÏòÁбí×·¼ÓÏî),
ĬÈÏÖµ¾Í±»ÐÞ¸ÄÁË.
½áÂÛ:
¹ÄÀøÊ¹ÓÃ, ²»¹ýÓÐÈçÏÂ×¢ÒâÊÂÏî:
²»ÒªÔÚº¯Êý»ò·½·¨¶¨ÒåÖÐʹÓÿɱä¶ÔÏñ×÷ΪĬÈÏÖµ¡£
Yes : def foo
( a , b = None ):
if b is None :
b = []
No : def foo ( a , b = []):
...
No : def foo ( a , b = time . time ()): # The
time the module was loaded???
...
No : def foo ( a , b = FLAGS . my_thing ): # sys.argv
has not yet been parsed...
...
|
ÊôÐÔ(properties)
·ÃÎʺÍÉèÖÃÊý¾Ý³ÉԱʱ, Äãͨ³£»áʹÓüòµ¥, ÇáÁ¿¼¶µÄ·ÃÎʺÍÉèÖú¯Êý. ½¨ÒéÓÃÊôÐÔ£¨properties£©À´´úÌæËüÃÇ¡£
¶¨Òå:
Ò»ÖÖÓÃÓÚ°ü×°·½·¨µ÷Óõķ½Ê½. µ±ÔËËãÁ¿²»´ó, ËüÊÇ»ñÈ¡ºÍÉèÖÃÊôÐÔ(attribute)µÄ±ê×¼·½Ê½¡£
Óŵã:
ͨ¹ýÏû³ý¼òµ¥µÄÊôÐÔ(attribute)·ÃÎÊʱÏÔʽµÄgetºÍset·½·¨µ÷ÓÃ, ¿É¶ÁÐÔÌá¸ßÁË. ÔÊÐíÀÁ¶èµÄ¼ÆËã.
ÓÃPythonicµÄ·½Ê½À´Î¬»¤ÀàµÄ½Ó¿Ú. ¾ÍÐÔÄܶøÑÔ, µ±Ö±½Ó·ÃÎʱäÁ¿ÊǺÏÀíµÄ, Ìí¼Ó·ÃÎÊ·½·¨¾ÍÏÔµÃËöËé¶øÎÞÒâÒå.
ʹÓÃÊôÐÔ(properties)¿ÉÒÔÈÆ¹ýÕâ¸öÎÊÌâ. ½«À´Ò²¿ÉÒÔÔÚ²»ÆÆ»µ½Ó¿ÚµÄÇé¿öϽ«·ÃÎÊ·½·¨¼ÓÉÏ.
ȱµã:
ÊôÐÔ(properties)ÊÇÔÚgetºÍset·½·¨ÉùÃ÷ºóÖ¸¶¨,ÕâÐèҪʹÓÃÕßÔÚ½ÓÏÂÀ´µÄ´úÂëÖÐ×¢Òâ:
setºÍgetÊÇÓÃÓÚÊôÐÔ(properties)µÄ(³ýÁËÓÃ@property×°ÊÎÆ÷´´½¨µÄÖ»¶ÁÊôÐÔ).±ØÐë¼Ì³Ð×ÔobjectÀà.¿ÉÄÜÒþ²Ø±ÈÈç²Ù×÷·ûÖØÔØÖ®ÀàµÄ¸±×÷ÓÃ.¼Ì³Ðʱ¿ÉÄÜ»áÈÃÈËÀ§»ó.
½áÂÛ:
Äãͨ³£Ï°¹ßÓÚʹÓ÷ÃÎÊ»òÉèÖ÷½·¨À´·ÃÎÊ»òÉèÖÃÊý¾Ý,ËüÃǼòµ¥¶øÇáÁ¿.²»¹ýÎÒÃǽ¨ÒéÄãÔÚеĴúÂëÖÐʹÓÃÊôÐÔ.Ö»¶ÁÊôÐÔÓ¦¸ÃÓÃ@property
×°ÊÎÆ÷À´´´½¨.
Èç¹û×ÓÀàûÓи²¸ÇÊôÐÔ, ÄÇôÊôÐԵļ̳пÉÄÜ¿´ÉÏÈ¥²»Ã÷ÏÔ. Òò´ËʹÓÃÕß±ØÐëÈ·±£·ÃÎÊ·½·¨¼ä½Ó±»µ÷ÓÃ,
ÒÔ±£Ö¤×ÓÀàÖеÄÖØÔØ·½·¨±»ÊôÐÔµ÷ÓÃ(ʹÓÃÄ£°å·½·¨Éè¼ÆÄ£Ê½).
Yes : import
math
class Square ( object ):
"""A square with two properties:
a writable area and a read-only perimeter.
""" To use:
""" >>> sq = Square(3)
>>> sq.area
9
>>> sq.perimeter
12
>>> sq.area = 16
>>> sq.side
4
>>> sq.perimeter
16
"" "
def __init__ ( self , side ):
self . side = side
def __get_area ( self ):
"""Calculates the 'area' property."""
return self . side ** 2
def ___get_area ( self ):
"""Indirect accessor for 'area'
property."""
return self . __get_area ()
def __set_area ( self , area ):
"""Sets the 'area' property."""
self . side = math . sqrt ( area )
def ___set_area ( self , area ):
"""Indirect
setter for 'area' property."""
self . _SetArea ( area )
area = property ( ___get_area , ___set_area
,
doc = """Gets or sets the area
of the square.""" )
@property
def perimeter ( self ):
return self . side * 4 |
(ÒëÕß×¢: ÀÏʵ˵, ÎÒ¾õµÃÕâ¶ÎʾÀý´úÂëºÜ²»Ç¡µ±, ÓбØÒªÕâôµ°ÌÛÂð?)
True/FalseµÄÇóÖµ
¾¡¿ÉÄÜʹÓÃÒþʽfalse¡£
¶¨Òå:
PythonÔÚ²¼¶ûÉÏÏÂÎÄÖлὫijЩֵÇóֵΪfalse. °´¼òµ¥µÄÖ±¾õÀ´½², ¾ÍÊÇËùÓеġ±¿Õ¡±Öµ¶¼±»ÈÏΪÊÇfalse.
Òò´Ë0£¬ None, [], {}, ¡°¡± ¶¼±»ÈÏΪÊÇfalse.
Óŵã:
ʹÓÃPython²¼¶ûÖµµÄÌõ¼þÓï¾ä¸üÒ×¶ÁÒ²¸ü²»Ò×·¸´í. ´ó²¿·ÖÇé¿öÏÂ, Ò²¸ü¿ì.
ȱµã:
¶ÔC/C++¿ª·¢ÈËÔ±À´Ëµ, ¿ÉÄÜ¿´ÆðÀ´Óеã¹Ö.
½áÂÛ:
¾¡¿ÉÄÜʹÓÃÒþʽµÄfalse,ÀýÈç:ʹÓöø²»ÊÇ.²»¹ý»¹ÊÇÓÐһЩעÒâÊÂÏîÐèÒªÄãÃú¼ÇÔÚÐÄ:
if foo:if foo != []:
1.ÓÀÔ¶²»ÒªÓÃ==»òÕß!=À´±È½Ïµ¥¼þ, ±ÈÈçNone. ʹÓÃis»òÕßis
not.
2.×¢Òâ:µ±ÄãдÏÂʱ,ÄãÆäʵ±íʾµÄÊÇ.ÀýÈç:µ±ÄãÒª²âÊÔÒ»¸öĬÈÏÖµÊÇNoneµÄ±äÁ¿»ò²ÎÊýÊÇ·ñ±»ÉèΪÆäËüÖµ.Õâ¸öÖµÔÚ²¼¶ûÓïÒåÏ¿ÉÄÜÊÇfalse!if
x:if x is not None
3.ÓÀÔ¶²»ÒªÓÃ==½«Ò»¸ö²¼¶ûÁ¿ÓëfalseÏà±È½Ï.ʹÓôúÌæ.Èç¹ûÄãÐè񻂿·ÖfalseºÍNone,ÄãÓ¦¸ÃÓÃÏñÕâÑùµÄÓï¾ä.if
not x:if not x and x is not None:
4.¶ÔÓÚÐòÁÐ(×Ö·û´®,Áбí,Ôª×é),ҪעÒâ¿ÕÐòÁÐÊÇfalse.Òò´Ë»òÕ߱ȻòÒª¸üºÃ.if
not seq:if seq:if len(seq):if not len(seq):
5.´¦ÀíÕûÊýʱ, ʹÓÃÒþʽfalse¿ÉÄÜ»áµÃ²»³¥Ê§(¼´²»Ð¡ÐĽ«Noneµ±×ö0À´´¦Àí).
Äã¿ÉÒÔ½«Ò»¸öÒÑÖªÊÇÕûÐÍ(ÇÒ²»ÊÇlen()µÄ·µ»Ø½á¹û)µÄÖµÓë0±È½Ï.
Yes : if not
users :
print 'no users'
if foo == 0 :
self . handle_zero ()
if i % 10 == 0 :
self . handle_multiple_of_ten ()
No : if len ( users ) == 0 :
print 'no users'
if foo is not None and not foo :
self . handle_zero ()
if not i % 10 :
self . handle_multiple_of_ten () |
6.×¢Òâ'0'(×Ö·û´®)»á±»µ±×ötrue.
¹ýʱµÄÓïÑÔÌØÐÔ
¾¡¿ÉÄÜʹÓÃ×Ö·û´®·½·¨È¡´ú×Ö·û´®Ä£¿é. ʹÓú¯Êýµ÷ÓÃÓ﷨ȡ´úapply(). ʹÓÃÁбíÍÆµ¼, forÑ»·È¡´úfilter(),
map()ÒÔ¼°reduce()¡£
¶¨Òå:
µ±Ç°°æ±¾µÄPythonÌṩÁË´ó¼Òͨ³£¸üϲ»¶µÄÌæ´úÆ·.
½áÂÛ:
ÎÒÃDz»Ê¹Óò»Ö§³ÖÕâÐ©ÌØÐÔµÄPython°æ±¾, ËùÒÔûÀíÓɲ»ÓÃеķ½Ê½.
Yes : words
= foo . split ( ':' )
[ x [ 1 ] for x in my_list if x [ 2 ] == 5
]
map ( math . sqrt , data ) # Ok. No inlined
lambda expression.
fn ( * args , ** kwargs )
No : words = string . split ( foo , ':' )
map ( lambda x : x [ 1 ], filter ( lambda
x : x [ 2 ] == 5 , my_list ))
apply ( fn , args , kwargs )
|
´Ê·¨×÷ÓÃÓò(Lexical Scoping)
ÍÆ¼öʹÓá£
¶¨Òå:
ǶÌ×µÄPythonº¯Êý¿ÉÒÔÒýÓÃÍâ²ãº¯ÊýÖж¨ÒåµÄ±äÁ¿, µ«ÊDz»Äܹ»¶ÔËüÃǸ³Öµ. ±äÁ¿°ó¶¨µÄ½âÎöÊÇʹÓôʷ¨×÷ÓÃÓò,
Ò²¾ÍÊÇ»ùÓÚ¾²Ì¬µÄ³ÌÐòÎı¾¡£
¶ÔÒ»¸ö¿éÖеÄij¸öÃû³ÆµÄÈκθ³Öµ¶¼»áµ¼ÖÂPython½«¶Ô¸ÃÃû³ÆµÄÈ«²¿ÒýÓõ±×ö¾Ö²¿±äÁ¿, ÉõÖÁÊǸ³ÖµÇ°µÄ´¦Àí.
Èç¹ûÅöµ½globalÉùÃ÷, ¸ÃÃû³Æ¾Í»á±»ÊÓ×÷È«¾Ö±äÁ¿.
Ò»¸öʹÓÃÕâ¸öÌØÐÔµÄÀý×Ó:
def
get_adder ( summand1 ):
"""Returns a function that adds
numbers to a given number."""
def adder ( summand2 ):
return summand1 + summand2
return adder |
(ÒëÕß×¢:Õâ¸öÀý×ÓÓеã¹îÒì,ÄãÓ¦¸ÃÕâÑùʹÓÃÕâ¸öº¯Êý: )
sum = get_adder(summand1)(summand2)
Óŵã:
ͨ³£¿ÉÒÔ´øÀ´¸ü¼ÓÇåÎú, ÓÅÑŵĴúÂë. ÓÈÆä»áÈÃÓоÑéµÄLispºÍScheme(»¹ÓÐHaskell,
MLµÈ)³ÌÐòÔ±¸Ðµ½ÐÀο.
ȱµã:
¿ÉÄܵ¼ÖÂÈÃÈËÃÔ»óµÄbug.ÀýÈçÏÂÃæÕâ¸öÒÀ¾ÝPEP-0227µÄÀý×Ó:
i
= 4
def foo ( x ):
def bar ():
print i ,
# ...
# A bunch of code here
# ...
for i in x : # Ah, i *is* local to Foo, so this
is what Bar sees
print i ,
bar ()
|
Òò´Ë»á´òÓ¡,²»ÊÇ.
foo([1, 2, 3])1 2 3 31 2 3 4
(ÒëÕß×¢: xÊÇÒ»¸öÁбí, forÑ»·ÆäʵÊǽ«xÖеÄÖµÒÀ´Î¸³¸øi.ÕâÑù¶ÔiµÄ¸³Öµ¾ÍÒþʽµÄ·¢ÉúÁË,
Õû¸öfooº¯ÊýÌåÖеÄi¶¼»á±»µ±×ö¾Ö²¿±äÁ¿, °üÀ¨bar()ÖеÄÄǸö. ÕâÒ»µãÓëC++Ö®ÀàµÄ¾²Ì¬ÓïÑÔ»¹ÊÇÓкܴó²î±ðµÄ.)
½áÂÛ:
¹ÄÀøÊ¹Óá£
º¯ÊýÓë·½·¨×°ÊÎÆ÷
Èç¹ûºÃ´¦ºÜÏÔÈ», ¾ÍÃ÷ÖǶø½÷É÷µÄʹÓÃ×°ÊÎÆ÷¡£
¶¨Òå:
ÓÃÓÚº¯Êý¼°·½·¨µÄ×°ÊÎÆ÷ (Ò²¾ÍÊÇ@±ê¼Ç).×î³£¼ûµÄ×°ÊÎÆ÷ÊÇ@classmethodºÍ@staticmethod,ÓÃÓÚ½«³£¹æº¯Êýת»»³ÉÀà·½·¨»ò¾²Ì¬·½·¨.²»¹ý,×°ÊÎÆ÷Óï·¨Ò²ÔÊÐíÓû§×Ô¶¨Òå×°ÊÎÆ÷.ÌØ±ðµØ,¶ÔÓÚij¸öº¯Êýmy_decorator,ÏÂÃæµÄÁ½¶Î´úÂëÊǵÈЧµÄ:
class C ( object
):
@my_decorator
def method ( self ):
# method body ...
class C ( object ):
def method ( self ):
# method body ...
method = my_decorator ( method ) |
Óŵã:
ÓÅÑŵÄÔÚº¯ÊýÉÏÖ¸¶¨Ò»Ð©×ª»». ¸Ãת»»¿ÉÄܼõÉÙÒ»Ð©ÖØ¸´´úÂë, ±£³ÖÒÑÓк¯Êý²»±ä(enforce invariants),
µÈ.
ȱµã:
×°ÊÎÆ÷¿ÉÒÔÔÚº¯ÊýµÄ²ÎÊý»ò·µ»ØÖµÉÏÖ´ÐÐÈκβÙ×÷, Õâ¿ÉÄܵ¼ÖÂÈÃÈ˾ªÒìµÄÒþ²ØÐÐΪ. ¶øÇÒ, ×°ÊÎÆ÷ÔÚµ¼ÈëʱִÐÐ.
´Ó×°ÊÎÆ÷´úÂëµÄʧ°ÜÖлָ´¸ü¼Ó²»¿ÉÄÜ.
½áÂÛ:
Èç¹ûºÃ´¦ºÜÏÔÈ», ¾ÍÃ÷ÖǶø½÷É÷µÄʹÓÃ×°ÊÎÆ÷. ×°ÊÎÆ÷Ó¦¸Ã×ñÊØºÍº¯ÊýÒ»ÑùµÄµ¼ÈëºÍÃüÃû¹æÔò. ×°ÊÎÆ÷µÄpythonÎĵµÓ¦¸ÃÇåÎúµÄ˵Ã÷¸Ãº¯ÊýÊÇÒ»¸ö×°ÊÎÆ÷.
ÇëΪװÊÎÆ÷±àдµ¥Ôª²âÊÔ¡£
±ÜÃâ×°ÊÎÆ÷×ÔÉí¶ÔÍâ½çµÄÒÀÀµ(¼´²»ÒªÒÀÀµÓÚÎļþ, socket,Êý¾Ý¿âÁ¬½ÓµÈ),ÒòΪװÊÎÆ÷ÔËÐÐʱÕâЩ×ÊÔ´¿ÉÄܲ»¿ÉÓÃ(ÓÉpydoc»òÆäËü¹¤¾ßµ¼Èë).Ó¦¸Ã±£Ö¤Ò»¸öÓÃÓÐЧ²ÎÊýµ÷ÓõÄ×°ÊÎÆ÷ÔÚËùÓÐÇé¿ö϶¼Êdzɹ¦µÄ¡£
×°ÊÎÆ÷ÊÇÒ»ÖÖÌØÊâÐÎʽµÄ¡±¶¥¼¶´úÂ롱.²Î¿¼ºóÃæ¹ØÓÚMainµÄ»°Ìâ¡£
¹ØÓÚÏß³Ì
²»ÒªÒÀÀµÄÚ½¨ÀàÐ͵ÄÔ×ÓÐÔ¡£
ËäÈ»PythonµÄÄÚ½¨ÀàÐÍÀýÈç×ֵ俴ÉÏÈ¥ÓµÓÐÔ×Ó²Ù×÷, µ«ÊÇÔÚijЩÇéÐÎÏÂËüÃÇÈÔÈ»²»ÊÇÔ×ÓµÄ(¼´:
Èç¹û__hash__»ò__eq__±»ÊµÏÖΪPython·½·¨)ÇÒËüÃǵÄÔ×ÓÐÔÊÇ¿¿²»×¡µÄ. ÄãÒ²²»ÄÜÖ¸ÍûÔ×Ó±äÁ¿¸³Öµ(ÒòΪÕâ¸ö·´¹ýÀ´ÒÀÀµ×Öµä)¡£
ÓÅÏÈʹÓÃQueueÄ£¿éµÄQueueÊý¾ÝÀàÐÍ×÷ΪÏ̼߳äµÄÊý¾ÝͨÐÅ·½Ê½.ÁíÍâ,ʹÓÃthreadingÄ£¿é¼°ÆäËøÔÓï(locking
primitives).Á˽âÌõ¼þ±äÁ¿µÄºÏÊÊʹÓ÷½Ê½,ÕâÑùÄã¾Í¿ÉÒÔʹÓÃthreading.ConditionÀ´È¡´úµÍ¼¶±ðµÄËøÁË¡£
ÍþÁ¦¹ý´óµÄÌØÐÔ
Òª±ÜÃâʹÓÃÕâÐ©ÌØÐÔ¡£
¶¨Òå:
PythonÊÇÒ»ÖÖÒì³£Áé»îµÄÓïÑÔ, ËüΪÄãÌṩÁ˺ܶ໨ÉÚµÄÌØÐÔ, ÖîÈçÔªÀà(metaclasses),
×Ö½ÚÂë·ÃÎÊ, ÈÎÒâ±àÒë(on-the-fly compilation), ¶¯Ì¬¼Ì³Ð, ¶ÔÏñ¸¸ÀàÖØ¶¨Òå(object
reparenting), µ¼ÈëºÚ¿Í(import hacks), ·´Éä, ϵͳÄÚÐÞ¸Ä(modification
of system internals), µÈµÈ.
Óŵã:
Ç¿´óµÄÓïÑÔÌØÐÔ, ÄÜÈÃÄãµÄ´úÂë¸ü½ô´Õ¡£
ȱµã:
ʹÓÃÕâЩºÜ¡±¿á¡±µÄÌØÐÔÊ®·ÖÓÕÈË, µ«²»ÊǾø¶Ô±ØÒª. ʹÓÃÆæ¼¼ÒùÇɵĴúÂ뽫¸ü¼ÓÄÑÒÔÔĶÁºÍµ÷ÊÔ. ¿ªÊ¼¿ÉÄÜ»¹ºÃ(¶ÔÔ×÷Õß¶øÑÔ),
µ«µ±Äã»Ø¹Ë´úÂë, ËüÃÇ¿ÉÄÜ»á±ÈÄÇЩÉÔ³¤Ò»µãµ«ÊǺÜÖ±½ÓµÄ´úÂë¸ü¼ÓÄÑÒÔÀí½â¡£
½áÂÛ:
ÔÚÄãµÄ´úÂëÖбÜÃâʹÓÃÕâÐ©ÌØÐÔ¡£
̟̞
module_name, package_name, ClassName, method_name,
ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name,
function_parameter_name, local_var_name.
Ó¦¸Ã±ÜÃâµÄÃû³Æ
µ¥×Ö·ûÃû³Æ, ³ýÁ˼ÆÊýÆ÷ºÍµü´úÆ÷.
°ü/Ä£¿éÃûÖеÄÁ¬×Ö·û(-)
˫ϻ®Ïß¿ªÍ·²¢½áβµÄÃû³Æ(Python±£Áô, ÀýÈç__init__)
ÃüÃûÔ¼¶¨
Ëùν¡±ÄÚ²¿(Internal)¡±±íʾ½öÄ£¿éÄÚ¿ÉÓÃ, »òÕß, ÔÚÀàÄÚÊDZ£»¤»ò˽Óеġ£
Óõ¥Ï»®Ïß(_)¿ªÍ·±íʾģ¿é±äÁ¿»òº¯ÊýÊÇprotectedµÄ(ʹÓÃfrom module import
*ʱ²»»á°üº¬)¡£
ÓÃ˫ϻ®Ïß(__)¿ªÍ·µÄʵÀý±äÁ¿»ò·½·¨±íʾÀàÄÚ˽ÓС£
½«Ïà¹ØµÄÀàºÍ¶¥¼¶º¯Êý·ÅÔÚͬһ¸öÄ£¿éÀï. ²»ÏñJava, û±ØÒªÏÞÖÆÒ»¸öÀàÒ»¸öÄ£¿é.
¶ÔÀàÃûʹÓôóд×Öĸ¿ªÍ·µÄµ¥´Ê(ÈçCapWords, ¼´Pascal·ç¸ñ), µ«ÊÇÄ£¿éÃûÓ¦¸ÃÓÃСд¼ÓÏ»®Ïߵķ½Ê½(Èçlower_with_under.py).
¾¡¹ÜÒѾÓкܶàÏÖ´æµÄÄ£¿éʹÓÃÀàËÆÓÚCapWords.pyÕâÑùµÄÃüÃû, µ«ÏÖÔÚÒѾ²»¹ÄÀøÕâÑù×ö, ÒòΪÈç¹ûÄ£¿éÃûÅöÇɺÍÀàÃûÒ»ÖÂ,
Õâ»áÈÃÈËÀ§ÈÅ¡£
PythonÖ®¸¸GuidoÍÆ¼öµÄ¹æ·¶£º

Main
¼´Ê¹ÊÇÒ»¸ö´òËã±»ÓÃ×÷½Å±¾µÄÎļþ, Ò²Ó¦¸ÃÊǿɵ¼ÈëµÄ. ²¢ÇÒ¼òµ¥µÄµ¼Èë²»Ó¦¸Ãµ¼ÖÂÕâ¸ö½Å±¾µÄÖ÷¹¦ÄÜ(main
functionality)±»Ö´ÐÐ, ÕâÊÇÒ»ÖÖ¸±×÷ÓÃ. Ö÷¹¦ÄÜÓ¦¸Ã·ÅÔÚÒ»¸ömain()º¯ÊýÖС£
ÔÚPythonÖÐ, pydocÒÔ¼°µ¥Ôª²âÊÔÒªÇóÄ£¿é±ØÐëÊǿɵ¼ÈëµÄ.
ÄãµÄ´úÂëÓ¦¸ÃÔÚÖ´ÐÐÖ÷³ÌÐòǰ×ÜÊǼì²é if __name__ == '__main__' , ÕâÑùµ±Ä£¿é±»µ¼ÈëʱÖ÷³ÌÐò¾Í²»»á±»Ö´ÐС£
def main():
...
if __name__ == '__main__':
main() |
ËùÓеĶ¥¼¶´úÂëÔÚÄ£¿éµ¼Èëʱ¶¼»á±»Ö´ÐÐ. ҪСÐIJ»ÒªÈ¥µ÷Óú¯Êý, ´´½¨¶ÔÏó, »òÕßÖ´ÐÐÄÇЩ²»Ó¦¸ÃÔÚʹÓÃpydocʱִÐеIJÙ×÷¡£
×¢ÊÍ(Comments)
ͬ´úÂë²»Ò»ÖµÄ×¢ÊͱÈûעÊ͸ü²î¡£µ±´úÂëÐÞ¸Äʱ£¬Ê¼ÖÕÓÅÏȸüÐÂ×¢ÊÍ¡£
×¢ÊÍÓ¦¸ÃÊÇÍêÕûµÄ¾ä×Ó¡£Èç¹û×¢ÊÍÊÇÒ»¸ö¶ÌÓï»ò¾ä×Ó£¬Ê××ÖĸӦ¸Ã´óд£¬³ý·ÇËüÊÇÒ»¸öÒÔСд×Öĸ¿ªÍ·µÄ±êʶ·û(ÓÀÔ¶²»ÒªÐ޸ıêʶ·ûµÄ´óСд)¡£
Èç¹û×¢Êͺ̣ܶ¬¿ÉÒÔÊ¡ÂÔĩβµÄ¾äºÅ¡£×¢ÊÍ¿éͨ³£ÓÉÒ»¸ö»ò¶à¸ö¶ÎÂä×é³É£¬¶ÎÂäÊÇÓÉÍêÕûµÄ¾ä×Ó¹¹³ÉµÄ£¬Ã¿¸ö¾ä×ÓÓ¦¸ÃÒÔ¾äºÅ½áβ¡£
ÄãÓ¦¸ÃÔÚ½áÊøÓï¾äµÄ¾äµã(a sentence-ending period)ºóʹÓÃÁ½¸ö¿Õ¸ñ¡£
ÒëÕß×¢£º·ÇÓ¢Óï¹ú¼ÒµÄPython³ÌÐòÔ±£ºÇëÓÃÓ¢ÓïÊéдÄãµÄ×¢ÊÍ£¬³ý·ÇÄã120%µÄÈ·ÐÅ´úÂëÓÀÔ¶²»»á±»²»¶®ÄãµÄÓïÑÔµÄÈËÔĶÁ¡£
1£©×¢ÊÍ¿é(Block Comments)
×¢ÊÍ¿éͨ³£Ó¦ÓÃÓÚ¸úËæÆäºóµÄһЩ (»òÕßÈ«²¿) ´úÂ룬²¢ºÍÕâЩ´úÂëÓÐ×ÅÏàͬµÄËõ½ø ²ã´Î¡£×¢ÊÍ¿éÖÐÿÐÐÒÔ
'#' ºÍÒ»¸ö¿Õ¸ñ¿ªÊ¼ (³ý·ÇËüÊÇ×¢ÊÍÄÚµÄËõ½øÎı¾)¡£
×¢ÊÍ¿éÄڵĶÎÂäÒÔ½öº¬µ¥¸ö '#' µÄÐзָ
2ÐÐÄÚ×¢ÊÍ(Inline Comments)
½Ú¼óʹÓÃÐÐÄÚ×¢ÊÍ¡£Ò»¸öÐÐÄÚ×¢ÊÍÊǺÍÓï¾äÔÚͬһÐеÄ×¢ÊÍ¡£ÐÐÄÚ×¢ÊÍÓ¦¸ÃÖÁÉÙÓÃÁ½¸ö¿Õ¸ñºÍÓï¾ä·Ö¿ª¡£ËüÃÇÓ¦¸ÃÒÔÒ»¸ö
'#' ºÍµ¥¸ö¿Õ¸ñ¿ªÊ¼¡£
ÐÐÄÚ×¢ÊͲ»ÊDZØÐèµÄ£¬ÊÂʵÉÏ£¬Èç¹û˵µÄÊÇÏÔ¶øÒ×¼ûµÄÊ£¬»¹»áʹÈË·ÖÐÄ¡£ |