क्या मैं बौनों की सूची को संक्षिप्तता के लिए एक विधि से पारित कर सकता हूं? यह मैं करने की कोशिश कर रहा हूँ:
def method(**kwargs):
#do something
keywords = (keyword1 = 'foo', keyword2 = 'bar')
method(keywords)
क्या मैं बौनों की सूची को संक्षिप्तता के लिए एक विधि से पारित कर सकता हूं? यह मैं करने की कोशिश कर रहा हूँ:
def method(**kwargs):
#do something
keywords = (keyword1 = 'foo', keyword2 = 'bar')
method(keywords)
जवाबों:
हाँ। आप इसे इस तरह करते हैं:
def method(**kwargs):
print kwargs
keywords = {'keyword1': 'foo', 'keyword2': 'bar'}
method(keyword1='foo', keyword2='bar')
method(**keywords)
पायथन में इसे चलाने से इन समान परिणामों की पुष्टि होती है:
{'keyword2': 'bar', 'keyword1': 'foo'}
{'keyword2': 'bar', 'keyword1': 'foo'}
**
खोल ऑपरेटर एक समारोह से एक और समारोह के kwargs को kwargs पारित करने के लिए इस्तेमाल किया जा सकता। इस कोड पर विचार करें: (newlines टिप्पणियों में अनुमति नहीं दी जाती है) def a(**kw): print(kw)
, और def b(**kw): a(kw)
। यह कोड एक त्रुटि उत्पन्न करेगा क्योंकि kwargs वास्तव में एक शब्दकोष है, और इसे dict
प्रकार के नियमित तर्क के रूप में व्याख्या किया जाएगा । यही वजह है कि त्रुटियों को अनपैक करने और हल करने के def b(**kw): a(kw)
लिए बदलना । def b(**kw): a(**kw)
kw
जैसा कि दूसरों ने बताया है, आप वही कर सकते हैं जो आप एक तानाशाही पारित करके चाहते हैं। एक तानाशाही के निर्माण के विभिन्न तरीके हैं। एक यह है कि को बरकरार रखता है keyword=value
शैली आपने प्रयास उपयोग करने के लिए है dict निर्मित:
keywords = dict(keyword1 = 'foo', keyword2 = 'bar')
की बहुमुखी प्रतिभा पर ध्यान दें dict
; ये सभी समान परिणाम देते हैं:
>>> kw1 = dict(keyword1 = 'foo', keyword2 = 'bar')
>>> kw2 = dict({'keyword1':'foo', 'keyword2':'bar'})
>>> kw3 = dict([['keyword1', 'foo'], ['keyword2', 'bar']])
>>> kw4 = dict(zip(('keyword1', 'keyword2'), ('foo', 'bar')))
>>> assert kw1 == kw2 == kw3 == kw4
>>>
इसलिए जब मैं यहां आया हूं तो मैं एक समारोह में कई ** kwargs पास करने का एक तरीका ढूंढ रहा था - बाद में आगे के कार्यों में उपयोग के लिए। क्योंकि यह, आश्चर्य की बात नहीं है, काम नहीं करता है:
def func1(**f2_x, **f3_x):
...
कुछ 'प्रायोगिक' कोडिंग के साथ मैं स्पष्ट रूप से यह करने के लिए आया कि यह कैसे करना है:
def func3(f3_a, f3_b):
print "--func3--"
print f3_a
print f3_b
def func2(f2_a, f2_b):
print "--func2--"
print f2_a
print f2_b
def func1(f1_a, f1_b, f2_x={},f3_x={}):
print "--func1--"
print f1_a
print f1_b
func2(**f2_x)
func3(**f3_x)
func1('aaaa', 'bbbb', {'f2_a':1, 'f2_b':2}, {'f3_a':37, 'f3_b':69})
यह उम्मीद के मुताबिक प्रिंट करता है:
--func1--
aaaa
bbbb
--func2--
1
2
--func3--
37
69
python 3.5
Foo(**arg1, **arg2)