I don't like Python functions that take two or more iterables. Is it a good idea? -


इस सवाल को देखने से आया:

  def fringe8 ((px, py), (X1, y1, x2, y2)):  

व्यक्तिगत तौर पर, मेरे पालतू जानवरों में से एक यह है कि एक फ़ंक्शन देखने के लिए दो अंकों के साथ तय संख्या वाले iterables (एक ट्यूपल की तरह) या दो या दो से अधिक शब्दकोश (जैसे की) में।

यह बेहतर नहीं होगा:

  & gt; & gt; & gt; यह सबसे कठिन होता है। वर्ग बिंदु (ऑब्जेक्ट): ... def __init __ (आत्म, एक्स, वाई): ... self.x = x ... self.y = y ... & gt; & gt; & gt; वर्ग आयत (वस्तु): ... def __init __ (आत्म, x1, y1, x2, y2): ... self.x1 = x1 ... self.y1 = y1 ... self.x2 = x2 ... Self.y2 = y2 ... & gt; & gt; & gt; Def fringe8 (बिंदु, rect): ... # ... ... & gt; & gt; & gt; & Gt; & gt; & gt; बिंदु = बिंदु (2, 2)> gt; & gt; & gt; Rect = Rect (1, 1, 3, 3) & gt; & gt; & gt; & Gt; & gt; & gt; Fringe8 (point, rect)  

क्या कोई ऐसी स्थिति है जहां दो या दो से अधिक आवेशपूर्ण तर्कों को उचित ठहराया जा सकता है? स्पष्ट रूप से मानक itertools पायथन लाइब्रेरी की जरूरत है, लेकिन मैं इसे सुंदर, लचीला कोड डिजाइन में नहीं देख सकता।

डीफ फ्रेंज 8 ((पीएक्स, पीए), (एक्स 1, वाई 1, एक्स 2, वाई 2) जैसे def सिंटैक्स,

पायथन 3 में चला गया है - जिसका मतलब है कि Guido ने यह एक डिजाइन त्रुटि, या कम से कम एक अनुचित जटिलता माना।

हालांकि, कई चलने वाले तर्कों को ले जाने वाले फ़ंक्शन केवल बिल्कुल ठीक है - itertools स्पष्ट रूप से नहीं कर सकते हैं अपने अनुप्रयोगों की ज़रूरत हो सकती है, हर बहुआयामी हेरफेर को encapsulate! "एक धारा" (संभवत: एक असीमित एक) के रूप में चलने के बारे में सोचकर, ऐसे कई तरीके हैं जिनमें आप एकाधिक धाराओं को एक में "मर्ज" कर सकते हैं, उदाहरण के लिए (उदाहरण के लिए उन धाराओं के बारे में सोचें जिन्हें सॉर्ट किए जाने के लिए जाना जाता है और आप प्रतिच्छेदन, या संघ को डुप्लिकेट्स को हटाए बिना या बिना आदि आदि बनाना चाहते हैं।)

क्यों कभी किसी को अपने एपीआई के डिज़ाइन को एक पूर्ण रूप से मनमानी निषेधाज्ञा का उल्लंघन करने के लिए कभी नहीं करना चाहिए एक फ़ंक्शन हस्ताक्षर के लिए एक से अधिक उपयोगी?!


Comments