2012-11-21 6 views
25

यहाँ के साथ समारोह पाश मैं पर map फ़ंक्शन का उपयोग करने की कोशिश कर रहा हूँ:का उपयोग करते हुए मानचित्र() कीवर्ड तर्क

volume_ids = [1,2,3,4,5] 
ip = '172.12.13.122' 
for volume_id in volume_ids: 
    my_function(volume_id, ip=ip) 

वहाँ एक रास्ता मैं यह कर सकता है? यह छोटा होगा यदि यह ip पैरामीटर के लिए नहीं था, लेकिन मुझे यकीन नहीं है कि इससे कैसे निपटें।

उत्तर

55

उपयोग functools.partial():

from functools import partial 

mapfunc = partial(my_function, ip=ip) 
map(mapfunc, volume_ids) 

partial() एक नया प्रतिदेय बनाता है, कि जो कुछ भी है कि नए प्रतिदेय के लिए पारित किया जा रहा है के अलावा में लिपटे कार्य करने के लिए (कीवर्ड तर्क सहित) किसी भी तर्क लागू कर देंगे।

+1

बहुत अच्छा, धन्यवाद! –

9

यहाँ एक लैम्ब्डा दृष्टिकोण (नहीं बेहतर है, बस अलग)

volume_ids = [1,2,3,4,5] 
ip = '172.12.13.122' 
map(lambda ids: my_function(ids, ip), volume_ids); 
+2

आंशिक तेजी से हैं, lambdas आदेश तर्कों से बाहर समर्थन –

0

कैसे इस बारे में है?

results = [] 
for volume_id in volume_ids: 
    results.append(my_function(volume_id, ip=ip)) 

यह एक के बजाय कोड की तीन लाइनों है --- यह बजाय मॉड्यूल इस तरह के और इस तरह के से कुछ विशेष-केस सहायक आयात करने की स्पष्ट व प्रत्यक्ष रूप कोड की तीन लाइनें है। यह तर्क शायद स्वाद का विषय है, लेकिन आप किसके साथ बात करते हैं इसके आधार पर इसका वजन बहुत अधिक है।

+0

समस्या यह है कि हम लूप – mleger45

+0

के लिए क्यों बचना चाहते हैं? क्योंकि यह स्पष्ट है? या कुछ गलत धारणा के कारण "पाइथन में लूप धीमे हैं"? –

+0

हां, मैं कहूंगा कि वास्तव में स्पष्ट, अधिक पाइथोनिश है, और मानचित्र फ़ंक्शन सबसे अजीब पुनरावृत्ति को निष्पादित करने के लिए है। इसके अलावा, हमें एक सूची की आवश्यकता है, इसलिए नक्शा लूप – mleger45

4

यह सूची समझ के साथ आसानी से किया जा सकता है।

volume_ids = [1,2,3,4,5] 
ip = '172.12.13.122' 
results = [my_function(i,ip=ip) for i in volume_ids] 
+1

के लिए कोडिंग करने वाली अधिक लाइनों को लिखने के बजाय हमारे लिए बेहतर प्रदर्शन करेगा, समझ में my_function के तर्क पीछे की ओर हैं। यह my_function (i, ip = ip) होना चाहिए –