PythonºÍDecorator£¨×°ÊÎÆ÷£©Ä£Ê½
Ïȸø³öÒ»¸öËÄÈËÍŶÔ
Decorator mode
µÄ¶¨Ò壺
¶¯Ì¬µØ
¸øÒ»¸ö
¶ÔÏó
Ìí¼ÓһЩ
¶îÍâµÄÖ°Ôð
¡£
ÔÙÀ´ËµËµÕâ¸öģʽµÄºÃ´¦£ºÈÏÖ¤£¬È¨ÏÞ¼ì²é£¬¼ÇÈÕÖ¾£¬¼ì²é²ÎÊý£¬¼ÓËø£¬µÈµÈµÈµÈ£¬ÕâЩ¹¦ÄܺÍϵͳҵÎñÎ޹أ¬µ«ÓÖÊÇϵͳËù±ØÐëµÄ£¬ËµµÄ¸üÃ÷°×Ò»µã£¬¾ÍÊÇÃæÏò·½ÃæµÄ±à³Ì£¨
AOP
£©¡£
AOP
°ÑÓëÒµÎñÎ޹صĴúÂëÊ®·Ö¸É¾»µÄ´ÓϵͳÖÐÇиî³öÀ´£¬µ«ÊÇ
Decorator mode
µÄÇ¿´óÔ¶²»Ö¹ÓÚ´Ë£¬±¾ÎĵÄÖØµãÔÚÓÚ
Decorator mode
ÔÚ
Python
ÖеÄÓ¦Óã¬ËùÒԾͲ»ÔÙ¹ý¶àÃèÊö
Decorator mode
±¾ÉíÁË£¬ÒªÏëÉîÈëÁ˽â¸Ãģʽ£¬Çë²Î¿¼ËÄÈËÍŵľµäÖ®×÷¡¶Éè¼ÆÄ£Ê½¡·¡£
ÔÚ
Python
ÖÐ
Decorator mode
¿ÉÒÔ°´ÕÕÏñÆäËü±à³ÌÓïÑÔÈç
C++, Java
µÈµÄÑù×ÓÀ´ÊµÏÖ£¬µ«ÊÇ
Python
ÔÚÓ¦ÓÃ
×°ÊÎ
¸ÅÄî·½ÃæµÄÄÜÁ¦ÉÏÔ¶²»Ö¹ÓÚ´Ë£¬
Python
ÌṩÁËÒ»¸öÓï·¨ºÍÒ»¸ö±à³ÌÌØÐÔÀ´¼ÓÇ¿Õâ·½ÃæµÄ¹¦ÄÜ¡£
Python
ÌṩµÄÓï·¨¾ÍÊÇ×°ÊÎÆ÷Óï·¨
(decorator)
£¬ÈçÏ£º
@aoo
def
foo(): pass
def
aoo(fn):
return fn
ÕâÀï²»¶Ô×°ÊÎÆ÷Óï·¨×ö¹ý¶àµÄ½âÊÍ£¬ÒòΪװÊÎÆ÷Óï·¨Ò²ÊÇ»ùÓÚÎÒ½«Òª½éÉܵÄÁíÒ»¸ö±à³ÌÌØÐÔ£¬µ±ÎÒ½éÉÜÍêÁíÒ»¸ö±à³ÌÌØÐÔºó£¬ÏàÐÅÄã»á¶Ô×°ÊÎÆ÷Óï·¨ÓиüÉîÈëµÄÈÏʶ¡£
Ò»¸öÊ®·ÖÖØÒªµÄ±à³ÌÌØÐÔ“±Õ°ü”
(closure)
Â¡ÖØµÇ³¡£¨ÌâÍâ»°£º¾Ý˵“±Õ°ü”ÒѾ½øÈë
java
ÏÂÒ»°æµÄÌØÐÔºòÑ¡ÁбíÁË£©
ÔÚ
Python
£¬
PHP
£¬
Perl
£¬
Ruby
£¬
JavaScript
µÈ¶¯Ì¬ÓïÑÔÖУ¬¶¼ÒѾʵÏÖÁ˱հüÌØÐÔ£¬
ΪʲôÕâ¸öÌØÐÔÄÇÃ´ÖØÒªÄØ£¿ÎÒÃÇÏÈÀ´¿´¿´ËüµÄͨË×һЩµÄ¶¨Ò壺
OO±à³Ì·¶Ê½ÖеĶÔÏóÊÇ“ÕûºÏÁ˺¯ÊýµÄÊý¾Ý¶ÔÏ󔣬ÄÇô±Õ°ü¾ÍÊÇ“ÕûºÏÁËÊý¾ÝµÄº¯Êý¶ÔÏó”
Ô´Îĵµ <http://blog.csdn.net/muzisoft2008/archive/2009/03/30/4036744.aspx
>
½èÓÃÒ»¸ö·Ç³£ºÃµÄ˵·¨À´×ö¸ö×ܽá(×¢
4
)£º¶ÔÏóÊǸ½ÓÐÐÐΪµÄÊý¾Ý£¬¶ø±Õ°üÊǸ½ÓÐÊý¾ÝµÄÐÐΪ¡£
Ô´Îĵµ <http://www.ibm.com/developerworks/cn/linux/l-cn-closure/index.html
>
ÕâÆªÎÄÕ¸üÏêϸµÄ½éÉÜÁ˱հü
±Õ°üµÄ¸ÅÄî¡¢ÐÎʽÓëÓ¦ÓÃ
Ô´Îĵµ <http://www.ibm.com/developerworks/cn/linux/l-cn-closure/index.html
>
ÏÂÃæ×ó±ßµÄ
foo1
Ö»ÊÇÒ»¸öÆÕͨµÄÄÚǶº¯Êý£¬¶øÓұߵÄ
boo
ÔòÊÇÒ»¸ö±Õ°ü£¬
def
foo(x):
&
Ïà¹ØÎĵµ£º
¼ò½é
ÄãÒѾѧϰÁËÈçºÎÔÚÄãµÄ³ÌÐòÖж¨ÒåÒ»´Îº¯Êý¶øÖØÓôúÂë¡£Èç¹ûÄãÏëÒªÔÚÆäËû³ÌÐòÖÐÖØÓúܶຯÊý£¬ÄÇôÄã¸ÃÈçºÎ±àд³ÌÐòÄØ£¿Äã¿ÉÄÜÒѾ²Âµ½ÁË£¬´ð°¸ÊÇʹÓÃÄ£¿é¡£Ä£¿é»ù±¾ÉϾÍÊÇÒ»¸ö°üº¬ÁËËùÓÐÄ㶨ÒåµÄº¯ÊýºÍ±äÁ¿µÄÎļþ¡£ÎªÁËÔÚÆäËû³ÌÐòÖÐÖØÓÃÄ£¿é£¬Ä£¿éµÄÎļþÃû±ØÐëÒÔ.pyΪÀ©Õ¹Ãû¡£
Ä£¿é¿ÉÒÔ´ÓÆäËû³ÌÐò ÊäÈë ÒÔ±ãÀûÓÃËüµ ......
±ê׼ͷ²¿
#!/usr/bin/python
±àÂë
ËùÓÐµÄ Python ½Å±¾Îļþ¶¼Ó¦ÔÚÎļþÍ·±êÉÏ #-*- coding:utf8 -*- ¡£ÉèÖÃ±à¼Æ÷£¬Ä¬Èϱ£´æÎª utf8 ¸ñʽ¡£
mainº¯Êý
Ó¦ÓóÌÐòÒª¶¨Òåmainº¯Êý¶ø²»ÒªÖ±½Óд½Å±¾
def main():
dosomething()
if
__name__ == "__main__"
:
main()
Èç¹ûÊÇÈ«¾Ö±äÁ¿£¬ÔòÐèÒªÏÔʽ¼ÓÉ ......
Áбí
listÊÇ´¦ÀíÒ»×éÓÐÐòÏîÄ¿µÄÊý¾Ý½á¹¹£¬¼´Äã¿ÉÒÔÔÚÒ»¸öÁбíÖд洢һ¸ö ÐòÁÐ
µÄÏîÄ¿¡£¼ÙÏëÄãÓÐÒ»¸ö¹ºÎïÁÐ±í£¬ÉÏÃæ¼ÇÔØ×ÅÄãÒªÂòµÄ¶«Î÷£¬Äã¾ÍÈÝÒ×Àí½âÁбíÁË¡£Ö»²»¹ýÔÚÄãµÄ¹ºÎï±íÉÏ£¬¿ÉÄÜÿÑù¶«Î÷¶¼¶À×ÔÕ¼ÓÐÒ»ÐУ¬¶øÔÚPythonÖУ¬
ÄãÔÚÿ¸öÏîĿ֮¼äÓöººÅ·Ö¸î¡£
ÁбíÖеÄÏîĿӦ¸Ã°üÀ¨ÔÚ·½À¨ºÅÖУ¬ÕâÑùPython¾ÍÖªµÀÄãÊÇ ......
´´½¨Áбí
sample_list = ['a',1,('a','b')]
Python Áбí²Ù×÷
sample_list = ['a','b',0,1,3]
µÃµ½ÁбíÖеÄijһ¸öÖµ
value_start = sample_list[0]
end_value =
sample_list[-1]
ɾ³ýÁбíµÄµÚÒ»¸öÖµ
del sample_list[0]
ÔÚÁбíÖвåÈëÒ»¸öÖµ
sample_list[0:0] = ['sample value']
µÃµ½ÁбíµÄ³¤¶È
list_length = ......
ǰ¼¸Ìì¿´µ½ÁËÒ»ÐÐÇó1000µÄ½×³ËµÄPython´úÂ룺
print
reduce
(
lambda
x
,
y
:
x
*
y
,
range
(
1
,
1001
))
Ò»ÏÂ×Ó±»python´úÂëµÄ¾«¼ò
Óë½ô´ÕËùÕÛ·þ£¬¹Ê¶Ô´úÂë½øÐÐÁ˼òµ¥µÄ·ÖÎö¡£
reduceÓërange¶¼ÊÇPythonµÄÄÚÖú¯Êý¡£
range£¨1£¬10 ......