सेल-वार्-से-लूप पाइलिंट से चेतावनी


91

निम्नलिखित कोड के लिए:

for sort_key, order in query_data['sort']:
    results.sort(key=lambda k: get_from_dot_path(k, sort_key),
                 reverse=(order == -1))

पाइलिंट ने एक त्रुटि की सूचना दी:

सेल वेरिएबल Sort_key लूप में परिभाषित किया गया है (सेल-वर्-से-लूप)

क्या कोई संकेत दे सकता है कि यहां क्या हो रहा है? Pylint स्रोत कोड से विवरण है:

एक क्लोजर में उपयोग किया जाने वाला चर लूप में परिभाषित किया गया है। यह बंद-चर के लिए समान मूल्य का उपयोग करके सभी बंद हो जाएगा।

लेकिन मुझे इसका कोई मतलब नहीं है कि इसका क्या मतलब है। क्या कोई समस्या का उदाहरण दे सकता है?


वस्तु किस प्रकार की है results? साधारण सूची? कुछ और?
केविन

1
उदाहरण के लिए देखें stackoverflow.com/q/12423614/3001761
jonrsharpe

@ केविन उदाहरण के लिए परिणाम = [{कुंजी: मूल्य}, {कुंजी: मूल्य} ...]
xis

ठीक। उस मामले में, मैं चेपनेर से सहमत हूं कि आपको यहां चेतावनी के बारे में चिंता करने की आवश्यकता नहीं है।
केविन

जवाबों:


102

नाम sort_keyके शरीर में lambdaऊपर देखा जाएगा जब समारोह वास्तव में कहा जाता है, तो यह मान दिखाई देगा sort_keyसबसे हाल ही में किया था। चूंकि आप sortतुरंत कॉल कर रहे हैं , sort_keyपरिणामी फ़ंक्शन ऑब्जेक्ट का उपयोग करने से पहले मूल्य बदल नहीं जाएगा, इसलिए आप चेतावनी को सुरक्षित रूप से अनदेखा कर सकते हैं। इसे चुप करने के लिए, आप sort_keyएक पैरामीटर का डिफ़ॉल्ट मान बना सकते हैं lambda:

results.sort(key=lambda k, sk=sort_key: get_from_dot_path(k, sk),
             reverse=(order == -1))

5
मैं चेतावनी को अनदेखा करने के बजाय समस्या को ठीक करने के पक्ष में हूँ। यदि संभव हो तो, मैं key=partial(get_from_dot_path, foo=sort_key)लैम्ब्डा अभिव्यक्ति के बजाय उपयोग करूंगा (यह मानकर कि आपके fooद्वारा get_from_dot_pathकिसी कीवर्ड तर्क के लिए उपयोग किए जाने वाले कुछ पैरामीटर नाम हैं , partialकेवल विशेष रूप से बाईं ओर स्थितीय मापदंडों को भरने की अनुमति देता है)।
चेपनर

1
आह मुझे नहीं पता था कि यह इसे ठीक कर देगा, मुझे लगा कि वे बराबर थे; उस स्थिति में मैं सहमत हूं।
समयदिवस

3
ध्यान रखें कि वर्तमान में चाल हमेशा github.com/PyCQA/pylint/issues/3107 पर
डैनियल पिन्योल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.