2014-07-15 5 views
18

तो मैं partials समझने की कोशिश कर रहा हूँ:functools.partial एक कीवर्ड तर्क के रूप में एक स्थितीय तर्क का उपयोग करना चाहता

import functools 

def f(x,y) : 
    print x+y 

g0 = functools.partial(f, 3) 
g0(1) 

4 # Works as expected 

में:

g1 = functools.partial(f, y=3) 
g1(1) 

4 # Works as expected 

में:

g2 = functools.partial(f, x=3) 
g2(1) 

TypeError: f() got multiple values for keyword argument 'x' 

TypeError गायब हो जाता है अगर मैं y का उपयोग कीवर्ड तर्क के रूप में करता हूं:

में:

g2(y=1) 

4 

TypeError क्या कारण हैं?

उत्तर

26

इसका वास्तव में functools.partial से कोई लेना देना नहीं है। आप अनिवार्य रूप से इस तरह अपने कार्य बुला रहे हैं:

f(1, x=3) 

अजगर पहले स्थितीय तर्क पूरा करता है, और अपने पहले तर्क x है। फिर कीवर्ड तर्क लागू होते हैं, और आप फिर सेx प्रदान करते हैं।

functools.partial() का पता लगाने का कोई मतलब नहीं है कि आपने पहले ही स्थितित्मक तर्क के रूप में पहले तर्कसंगत तर्क की आपूर्ति की है। यह y= कीवर्ड तर्क के साथ स्थितित्मक तर्क को बदलकर आपकी कॉल को बढ़ाएगा नहीं।

स्थितित्मक और कीवर्ड तर्कों को मिलाते समय, आपको ध्यान रखना चाहिए कि दो बार एक ही तर्क का उपयोग न करें।

संबंधित मुद्दे