2017-07-20 15 views
6
साथ "मॉड्यूल"

मैं निम्नलिखित पायथन कोड है:छाया में निर्मित नाम "समारोह" और PyCharm

function = "Developer" 
module = "something" 
print(function + " on " + module) 

PyCharm 2017 के साथ, मैं एक बुलबुला है जो कहता है "छाया में निर्मित नाम" समारोह "/"मॉड्यूल" PyCharm के साथ "।

मुझे आश्चर्य है क्योंकि "फ़ंक्शन" और "मॉड्यूल" नामों में अंतर्निहित नहीं हैं। वे या तो कीवर्ड नहीं हैं:

import __builtin__ 
import keyword 

assert "function" not in dir(__builtin__) # -> OK 
assert "module" not in dir(__builtin__) # -> OK 
assert "function" not in keyword.kwlist # -> OK 
assert "module" not in keyword.kwlist  # -> OK 

क्या गलत है?

मैं सीपीथन 2.7 का उपयोग कर रहा हूं, लेकिन 3.5 & 3.6 के साथ एक ही समस्या है।

संपादित करें:

__builtin__ अब builtins पायथन 3. में है

उत्तर

7

function "परिभाषित" है builtins.pyi में:

class function: 
    # TODO not defined in builtins! 
    __name__ = ... # type: str 
    __qualname__ = ... # type: str 
    __module__ = ... # type: str 
    __code__ = ... # type: Any 
    __annotations__ = ... # type: Dict[str, Any] 

ध्यान रखें मैं "परिभाषित" का इस्तेमाल किया बनाम परिभाषित किया। इस मूर्खता की जाँच करें:

foo = function 

इस छाया है कि एक अंतर्निहित नाम (भले ही function स्पष्ट रूप से है नहीं

Traceback (most recent call last): 
    File "main.py", line 117, in <module> 
    foo = function 
NameError: name 'function' is not defined 

को जन्म देती है फिर भी अगर आप function = 'a' कर आईडीई शिकायत कर दी जाएगी (क्या आपने देखा) वास्तव में परिभाषित)।

सटीक व्यवहार module के साथ दोहराता है।

ऐसा इसलिए है क्योंकि (जहां तक ​​मैं समझता हूं, अगर कोई गलत है तो कृपया मुझे सही करें) pyi फ़ाइलें केवल प्रकार संकेत प्रदान करने के लिए हैं (PEP-484 suggests)।

तो, मुझे यकीन नहीं है कि यह चेतावनी पिचर्म के लिटर में एक बग है (शायद इसे .pyi फ़ाइलों में "परिभाषाओं" को नहीं देखना चाहिए) या एक इच्छित व्यवहार।

किसी भी तरह से, मॉड्यूल और फ़ंक्शन शायद वैसे भी अच्छे चर नाम नहीं हैं।

+0

मुझे अभी भी समझ में नहीं आ रहा है कि क्यों "फ़ंक्शन" PyCharm स्टब्स में मौजूद है ... –

+0

@LaurentLAPORTE आपको जेटब्रेन से पूछने की आवश्यकता होगी, लेकिन जैसा कि मैंने अपने उत्तर में समझाया है, यह शायद किसी भी तरह से संकेत देने में मदद करता है। – DeepSpace

+0

मुझे गिटहब पर [टाइपेड] (https://github.com/python/typeshed/) संदर्भ मिला। उद्धरण: "प्रत्येक पायथन मॉड्यूल का प्रतिनिधित्व' .pyi' "stub" द्वारा किया जाता है। यह एक सामान्य पायथन फ़ाइल है (यानी, इसे पायथन 3 द्वारा व्याख्या किया जा सकता है), सिवाय सभी विधियां खाली हैं। पायथन फ़ंक्शन एनोटेशन ([पीईपी 3107] (https://www.python.org/dev/peps/pep-3107/)) फ़ंक्शन के प्रकारों का वर्णन करने के लिए उपयोग किया जाता है।" –

1

प्रति PY-8672, मार्च 2014 से इस निरीक्षण के साथ कुछ नामों को अनदेखा करने की क्षमता है। ओपन सेटिंग्स, "शेडिंग बिल्ट-इन्स" खोजें, निरीक्षण नाम पर क्लिक करें, और निरीक्षण नामों को जोड़ने के लिए विकल्प अनुभाग का उपयोग करें, निरीक्षण को श्वेतसूची में डालना चाहिए।