2011-11-05 10 views
7

मैं अजगर से संबंधित एक कोड समझ समस्या है।अजगर रूपांतरण पागलपन

अफसोस की बात है कि कमांड संदर्भ ऐसा उपयोग उदाहरण नहीं दिखाता है, और मैं वास्तव में यह नहीं बता सकता कि क्या इसका मतलब है कि इसका मतलब है कि एक दूसरे के बाईं ओर असाइनमेंट है?

इसके अतिरिक्त, नीचे असाइनमेंट का अर्थ संभवतः क्या हो सकता है? क्या 'के लिए' कथन एक मूल्य वापस करता है?!?

शुरुआती प्रश्न के लिए धन्यवाद और खेद है।

+0

इस फ़ंक्शन की पहली पंक्ति वास्तव में एक भयानक कोडिंग शैली है। 'xrange (len (pts) में टी के लिए: m = 2 ** 2 ** t' तेज़, छोटा और पढ़ने के लिए बहुत आसान है। –

उत्तर

11

इस कोड को समझने के लिए, आपको सबसे पहले 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 कुछ उदाहरण के साथ एक बहुत अच्छी व्याख्या है।

+0

हां, बढ़िया! यह समझ में आता है। एक आखिरी बात: क्या आप बता सकते हैं कि अंक [i: i + m] क्या मतलब है? क्या मुझे लगता है कि एक उप सरणी है? – roamcel

+0

@roamcel - मेरा संपादन देखें, सिंटैक्स को स्लाइसिंग कहा जाता है, और यह वही करता है जो आपने सोचा था :) –

+0

बहुत बढ़िया, धन्यवाद! – roamcel

संबंधित मुद्दे