python - How does 'yield' work in this permutation generator? -


  def perm_generator (lst): अगर लेन (lst) == 1: उपज lst else: i के लिए श्रेणी में Perm_generator (lst [: i] + lst [i + 1:]) में पर्म के लिए: उपज [lst [i]] + perm  

यह कोड है मुझे गड़बड़ कर दिया गया है, क्योंकि मुझे नहीं पता कि कैसे उपज एक दूसरे से जुड़ते हैं मेरी समझ यह थी कि उपज एक रिटर्न की तरह काम करती है, लेकिन इसे अस्थायी रूप से रोकता है जब तक इसे फिर से नहीं कहा जाता है यह कैसे उपज s काम करता है?

यह एक संस्करण को देखने में मदद कर सकता है जनरेटर का उपयोग नहीं करता:

  def perm_generator (lst): res = [] अगर len (lst) == 1: वापसी [lst] else: श्रेणी के लिए मैं (लेन (lst) ): Perm_generator (lst [: i] + lst [i + 1:]) में perm के लिए: res.append ([lst [i]] + perm) रिटर्न res gen = perm_generator ([1,2,3]) प्रिंट जनरल # प्रिंट [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1] ]]  

जैसा कि आप देख सकते हैं - यह "उपज" के साथ "वापसी" के "ढूंढें और प्रतिस्थापित" नहीं है "वापसी" संस्करण में हमें नतीजे को जमा करना होगा, जबकि "उपज" संस्करण में जो कुछ भी करने की जरूरत है वह वर्तमान क्रमचय को "उपज" करना है।


Comments

Popular posts from this blog

java - org.apache.http.ProtocolException: Target host is not specified -

java - Gradle dependencies: compile project by relative path -

ruby on rails - Object doesn't support #inspect when used with .include -