सभी चर्चा पाइथन 3.1.2 के बारे में है; मेरे प्रश्न के स्रोत के लिए Python docs देखें।ज़िप कार्य को समझना
मुझे पता है कि zip
करता है; मैं तो बस समझ में नहीं आता क्यों यह इस तरह लागू किया जा सकता:
def zip(*iterables):
# zip('ABCD', 'xy') --> Ax By
iterables = map(iter, iterables)
while iterables:
yield tuple(map(next, iterables))
मान लीजिए कि मैं zip(c1, c2, c3)
कहते हैं। अगर मैं सही ढंग से समझता हूं, तो शुरुआत में ट्यूबल (सी 1, सी 2, सी 3) है।
लाइन iterables = map(iter, iterables)
इसे एक पुनरावर्तक में परिवर्तित करती है जो इसे इटर (सी 1), इटर (सी 2), इटर (सी 3) वापस लौटाएगी।
पाश अंदर, map(next, iterables)
पुनरावर्तक कि वापसी होगी next(iter(c1))
, next(iter(c2))
, और next(iter(c3))
अगर के माध्यम से दोहराया है। tuple
कॉल इसे (next(iter(c1)), next(iter(c2)), next(iter(c3))
में परिवर्तित करता है, जहां तक मैं कह सकता हूं, पहले कॉल पर इसके तर्क (iterables
) को समाप्त कर देता है। मुझे समझ में नहीं आता कि while
लूप कैसे जारी रखने के लिए प्रबंधित करता है कि यह iterables
की जांच करता है; और यदि यह जारी रहता है तो tuple
कॉल खाली टुपल वापस नहीं लौटाता है (इटरेटर थक गया है)।
मुझे यकीन है कि मैं बहुत ही सरल कुछ याद कर रहा हूँ कर रहा हूँ ..
अजीब, यह मेरे लिए अंतहीन रूप से लूप करता है भले ही यह पूरी तरह से ठीक दिखता है ... और मेरा स्वयं का प्रयास या तो काम नहीं करता है। मैं चौंक गया हूं। – delnan
मुझे लगता है कि यह सिर्फ छद्म कोड है और इसे सचमुच नहीं लिया जाना चाहिए। –
@Radomir Dopieralski यह पायथन कोड है, छद्म कोड नहीं, सीधे दस्तावेज़ीकरण से कॉपी किया गया। अगर मैं इस पर भरोसा नहीं कर सका तो मैं काफी दुखी होगा, और इसके बजाय मुझे वास्तव में क्या करना है इसके बारे में मेरा सर्वश्रेष्ठ अनुमान बनाना था। जब भी मैं फ़ंक्शन के अर्थशास्त्र के बारे में 100% निश्चित नहीं हूं, तो मैं इस तरह के कोड को संदर्भित करता हूं। – max