अजगर 3.6, the keyword argument order is preserved के रूप में के रूप में OrderedDict पारित नहीं चाहते हैं। 3.6 से पहले, यह संभव नहीं है क्योंकि OrderedDict
dict
में बदल जाता है।
पहली बात को एहसास है कि मूल्य आप **example
में पास स्वचालित रूप से **kwargs
में मूल्य नहीं होता है।
def f(a, **kwargs):
pass
example = {'a': 1, 'b': 2}
f(**example)
या इस मामले में, यह उदाहरण में उन लोगों की तुलना में अधिक मान होगा जहां: बिल्कुल
example = {'b': 2}
f(a=1, c=3, **example)
या यहां तक कि कोई ओवरलैप:
इस मामले पर विचार करें, जहां
kwargs
केवल
example
का हिस्सा होगा
example = {'a': 1}
f(b=2, **example)
तो, आप जो चाह रहे हैं वास्तव में कोई मतलब नहीं है।
फिर भी, यह अच्छा होगा यदि वहाँ कोई रास्ता है कि आप एक आदेश दिया **kwargs
जाएँ, चाहे निर्दिष्ट करने के लिए थे हो सकता है जहां कीवर्ड से वे दिखाई देते हैं में से स्पष्ट कीवर्ड आर्ग आया था, के आइटम के सभी के द्वारा पीछा किया **example
क्रम में वे example
में दिखाई देते हैं (यदि example
dict
थे, तो यह मनमाना हो सकता है, लेकिन यदि यह OrderedDict
था तो भी सार्थक हो सकता है)।
सभी समझदार विवरणों को परिभाषित करना, और निष्पादन को स्वीकार्य रखना, यह लगता है कि यह कठिन लगता है। विचार पर कुछ चर्चा के लिए PEP 468, और जुड़े धागे देखें। ऐसा लगता है कि इस बार चारों ओर रुका हुआ है, लेकिन अगर कोई इसे उठाता है और इसे चैंपियन करता है (और लोगों के साथ खेलने के लिए एक संदर्भ कार्यान्वयन लिखता है - जो सीपीआई से OrderedDict
तक पहुंच योग्य है, लेकिन उम्मीद है कि 3.5+), मुझे संदेह है कि यह अंततः भाषा में आ जाएगा।
वैसे, ध्यान दें कि यदि इस संभव थे, यह लगभग निश्चित रूप से निर्माता में OrderedDict
खुद के लिए इस्तेमाल किया जाएगा। लेकिन अगर आपको लगता है कि कोशिश, तुम सब कर रहे हैं स्थायी आदेश के रूप में कुछ मनमाने ढंग से आदेश ठंड है:
>>> d = OrderedDict(a=1, b=2, c=3)
OrderedDict([('a', 1), ('c', 3), ('b', 2)])
इस बीच, क्या विकल्प है?
ठीक है, स्पष्ट विकल्प सिर्फ बजाय इसे खोल का एक सामान्य तर्क के रूप में example
पारित करने के लिए है:
def f(example):
pass
example = OrderedDict([('a', 1), ('b', 2)])
f(example)
या, निश्चित रूप से, आप *args
का उपयोग करें और tuples के रूप में आइटम पारित कर सकते हैं, लेकिन है कि आम तौर भद्दा है ।
पीईपी से जुड़े धागे में कुछ और कामकाज हो सकते हैं, लेकिन वास्तव में, उनमें से कोई भी इससे बेहतर नहीं होगा। (इसके अलावा ... आईआईआरसी, ली हाओई अपने MacroPy के आधार पर एक समाधान के साथ आया, ताकि क्रमशः कीवर्ड तर्कों को पारित किया जा सके, लेकिन मुझे विवरण याद नहीं हैं। सामान्य रूप से मैक्रोपी समाधान अद्भुत हैं यदि आप मैक्रोपी का उपयोग करने और कोड लिखने के इच्छुक हैं जो पाइथन की तरह नहीं पढ़ता है, लेकिन यह हमेशा उपयुक्त नहीं है ...)
विस्तृत उत्तरदाताओं के लिए धन्यवाद। मैंने जो किया वह एक वैकल्पिक पहला तर्क (एक आदेश दिया गया आदेश) की अनुमति देने के लिए किया गया था जो प्रदान किए जाने पर ** kwargs को प्राथमिकता में उपयोग किया जाएगा। महान जानकारी, हालांकि – theodox
** यह भी देखें: ** https://duckduckgo.com/?q=pep468 – dreftymac