इस कोड को समझने के लिए, आपको सबसे पहले list comprehensions और generator expressions समझने की आवश्यकता है।
>>> [str(i) for i in range(5)]
['0', '1', '2', '3', '4']
आप देख सकते हैं, यह एक लाइन निम्नलिखित नियमित for
पाश के बराबर करता है:: यह एक सरल सूची समझ का एक उदाहरण है
lst = []
for i in range(5):
lst.append(str(i))
असल में, इसके लिए एक आशुलिपि है सूचियां बनाना जेनरेटर एक्सप्रेशन समान हैं, सिवाय इसके कि एक सूची लौटने की बजाय वे एक जनरेटर लौटाते हैं जो वास्तव में पूरी सूची बनाने के बिना, सूची समझ के समान मूल्यों को उत्पन्न करेगा। यह अधिक कुशल है जब आप केवल मूल्यों के माध्यम से लूप जा रहे हैं।
def convex_hull(pts):
"""Returns the points on the convex hull of pts in CCW order."""
for t in xrange(len(pts)):
m = 2 ** (2 ** t)
hulls = []
for i in xrange(0, len(pts), m):
hulls.append(_graham_scan(pts[i:i + m]))
# more code
अपनी टिप्पणी के लिए के रूप में, pts[i:i + m]
सूचकांक i
से सूची का एक टुकड़ा ले जा रहा है:
अब जब कि पृष्ठभूमि रास्ते से बाहर है, आपके द्वारा नियमित for
छोरों का उपयोग कर कि कोड का विस्तार कर सकता है सूचकांक i + m
अप करने के लिए, आप मूल रूप से इस तरह स्लाइस पढ़ सकते हैं:
[first index to include : first index to exclude : step]
This answer कुछ उदाहरण के साथ एक बहुत अच्छी व्याख्या है।
स्रोत
2011-11-05 06:53:58
इस फ़ंक्शन की पहली पंक्ति वास्तव में एक भयानक कोडिंग शैली है। 'xrange (len (pts) में टी के लिए: m = 2 ** 2 ** t' तेज़, छोटा और पढ़ने के लिए बहुत आसान है। –