é¦å
è¯å® map åå表æ¨å¯¼æçç¡®å®ä¼æ¯å¾ªç¯çé«ï¼
å
说å表æ¨å¯¼ï¼ä¸è¾¹æ¯æå¨ ipython éçæµè¯ç»æï¼æµè¯ç¯å¢ Python 2.7.10ï¼ï¼
>>> long_list = range(1000)
>>> a = []
>>> %timeit for i in long_list: a.append(i+1)
10000 loops, best of 3: 100 µs per loop
>>> %timeit [i+1 for i in long_list]
10000 loops, best of 3: 43.3 µs per loop
å¯ä»¥çåºå表æ¨å¯¼è¿æ¯è¦å¿«è¿ for 循ç¯çã
é£ä¸ºä»ä¹å表æ¨å¯¼ä¼å¿«å¢ï¼æ们ç´æ¥è°ç¨ python ç dis 模åå»ççä»çåèç ï¼
è¿ä¸ªæ¯å表æ¨å¯¼é£ä¸è¡ä»£ç çåèç ï¼
0 BUILD_LIST 0
3 LOAD_GLOBAL 0 (long_list)
6 GET_ITER
>> 7 FOR_ITER 16 (to 26)
10 STORE_FAST 0 (i)
13 LOAD_FAST 0 (i)
16 LOAD_CONST 1 (1)
19 BINARY_ADD
20 LIST_APPEND 2
23 JUMP_ABSOLUTE 7
...
è¿ä¸ªæ¯ for 循ç¯é£ä¸è¡çåèç ï¼
6 SETUP_LOOP 31 (to 40)
9 LOAD_GLOBAL 0 (long_list)
12 GET_ITER
>> 13 FOR_ITER 23 (to 39)
16 STORE_FAST 1 (i)
19 LOAD_FAST 0 (a)
22 LOAD_ATTR 1 (append)
25 LOAD_FAST 1 (i)
28 LOAD_CONST 1 (1)
31 BINARY_ADD
32 CALL_FUNCTION 1
35 POP_TOP
36 JUMP_ABSOLUTE 13
...
对æ¯ä¸ä¸ä¸é¾åç°å
¶å®å表æ¨å¯¼å for 循ç¯çè¿ç¨å ä¹æ¯ä¸æ ·çï¼é¤äºå¦ä½appendãæä»¥ä½ è¦è¯´ä»æ¯è¯æ³ç³ä¹ä¸æ¯ä¸è¡â¦â¦
å¨
å表æ¨å¯¼ä¸ç´æ¥ä½¿ç¨äºâLIST_APPENDâè¿ä¸ªåèç æ¥å®ç° append åè½ï¼æçç¸å½çé«ãèå¨ for 循ç¯ä¸æ¯æ¬¡å¾ªç¯é½è¦å
è½½å
¥
append è¿ä¸ªå±æ§ç¶åå âCALL_FUNCTIONâä¸ä¸ãè¿æ ·å¿å¿
å°±ä¼æ
¢äºå¾å¤ã为äºéªè¯æ们ççæ³ï¼æ们æ append
è¿ä¸ªå½æ°åå°å±é¨åééå»ï¼
>>> a = []
>>> invoke = a.append
>>> %timeit for i in long_list: invoke(i+1)
10000 loops, best of 3: 67.2 µs per loop
åç°æ²¡ææ¯åä¸ä¸ªçæ¬ç for 循ç¯å¿«äºæ¥è¿40%ï¼å©ä¸çå¤åºæ¥20å¤ µs çå¼éèªç¶å°±æ¯âCALL_FUNCTIONâçå¼éå¯ â®(â¯_â°)âã
ç¸ä¿¡å°è¿éä½ åºè¯¥æç½äºä¸ºä»ä¹å表æ¨å¯¼è¦æ¯ for 循ç¯å¿«å§ï¼ç§è¯å°±å¨è¿ä¸ªâLIST_APPENDâè¿ä¸ªåèç ä¸ï¼ç¸å½äºä½ ç´æ¥è°ç¨äº C è¯è¨çæ¬çå½æ°ï¼ä¸ä¸¥è°¨ï¼èä¸è¶è¿äºä¸äºä¸é´æ¥éª¤ã
æ¥ä¸æ¥ç®å说说 map çäºæ
ï¼ç´æ¥ä½¿ç¨ map ä¸è¬æ¥è¯´æ¯è¦æ¯å¾ªç¯å¿«çï¼ä½æçæ¶åæ
åµä¼æ¯è¾è¯¡å¼ï¼ä¾å¦ï¼
>>> %timeit for i in long_list: a.append(i+1)
10000 loops, best of 3: 100 µs per loop
>>> %timeit map(lambda x: x+1, long_list)
10000 loops, best of 3: 109 µs per loop
å«æ¥ï¼æ们æ map çåæ³æ¹æè¿æ ·ï¼
>>> int_object = 1
>>> %timeit map(int_object.__add__, long_list)
10000 loops, best of 3: 41.6 µs per loop
äºæ¯ç¥å¥çäºæ
åºç°äºï¼åºæ¬ä¸åå表æ¨å¯¼ä¸æ ·å¿«ï¼(âoâ)
è¿ä¸ªä¸»è¦æ¯å 为 lambda
表达å¼çæçå½æ°æ¯ Python çï¼èç´æ¥ç¨+è¿ç®ç¬¦æè
__add__æ¹æ³è°ç¨çæ¯ C çæ¬çãä½ è¦æ¯æå表æ¨å¯¼éè¾¹ç+æ¢æ lambda
表达å¼ä¸¤è
çé度差ä¸å¤ï¼map ä¸è¬æ¥è¯´è¿è¦å¿«ä¸ä¸ç¹ç¹ãæ¬è´¨ä¸æ¥è¯´ map è°ç¨äºåºå±ç C å½æ°æ以é度èªç¶æ¯å¿«çãç²æ´çæ»ç»ä¸ä¸å°±æ¯ä¸ç¨
lambda çæ¶å map è¦å¿«ä¸äº
温馨提示:答案为网友推荐,仅供参考