python - Special use of args / kwargs -


मुझे कुछ ऐसा करने की आवश्यकता है:

  def func1 (a, * args, B = "BBB", ** kwargs): मुद्रित "a =% sb =% s args =% s kwargs =% s"% (a, b, args, kwargs)   

तो ऐसा कॉल करना:

  func1 ("एएएए", एच = "एचएचएच", जे = "जे जे जे")   

उत्पादन का उत्पादन: < / P>

  a = aaaa b = बीबीबी आर्ग्स = () kwargs = {'h': 'hhh', 'j': 'jjj'}   

लेकिन * आर्ग्स के बाद एक डिफ़ॉल्ट नाम का तर्क देना संभव नहीं है ( SyntaxError: अमान्य सिंटैक्स )

  • यह क्यों अनुमति नहीं है?
  • क्या इसे लागू करने के लिए कोई पठनीय तरीका है? एकमात्र तरीका मुझे पता है b = kwargs.pop ("b", "BBB") , लेकिन यह बहुत पठनीय नहीं है। मैं फ़ंक्शन कॉल परिभाषा में इसे पसंद करता हूं, जहां यह संबंधित है: यह एक पैरामीटर है जो हमेशा के पास एक मान होता है, या तो कोई डिफ़ॉल्ट मान या उपयोगकर्ता द्वारा दिये गए मान। < / Ul>

    संपादित करें

    मैं b के सामने args :

      def func1 डाल सकता / सकती हूं ए, बी = "बीबीबी", * एल्ग्स, ** क्वार्ज): मुद्रित करें "a =% sb =% s args =% s kwargs =% s"% (a, b, args, kwargs)   

    लेकिन इसका मतलब यह होगा कि यह कॉल:

      func1 ("एएएए", "सीसीसी", एच = "एचएचएच", जे = "जे जे जे")  < / प्री> 

    "सीसीसी" से बी को निर्दिष्ट करता है, जो मुझे नहीं चाहिए। मैं चाहता हूं कि b को एक नामित आरजी होना चाहिए, कोई प्रचलित तर्क नहीं।

    यह पायथन 3 () में बिल्कुल मान्य है; कीवर्ड-केवल तर्कों को शुरू किया।

    पायथन 2.x में आपको kwargs.pop , या उपयुक्त डेकोरेटर का उपयोग करना जारी रखना होगा:



Comments

Popular posts from this blog

excel vba - How to delete Solver(SOLVER.XLAM) code -

github - Teamcity & Git - PR merge builds - anyway to get HEAD commit hash? -

ios - Replace text in UITextView run slowly -