2017-07-20 6 views
6
と名「機能」と「モジュール」

I次のPythonコードを持っている:影内蔵のPyCharm

PyCharm 2017で、私が言うのバブルを持って
function = "Developer" 
module = "something" 
print(function + " on " + module) 

「影内蔵の名称 『機能』/"モジュール" PyCharm "

"function"と "module"は組み込みの名前ではないので、私は驚いています。それらはキーワードでもありません:

​​

何が問題なのですか?

私はCPython 2.7を使用していますが、3.5 & 3.6と同じ問題があります。

EDIT:

__builtin__

答えて

7

functionbuiltins.pyiに "定義された" されてPythonの3になりましたbuiltinsです:

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

定義された対I "が定義されている" 使用に注意してください。この不条理をチェックアウト:

foo = function 

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

を提起しかし、あなたがfunction = 'a'を行う場合(あなたが気づいたように)IDEはfunctionは明らかにでなくても(これは組み込みの名前をシャドウと文句を言うだろう実際にはが定義されています)。

正確な動作はmoduleで繰り返されます。

pyiファイルは、タイプヒント(PEP-484 suggestsなど)を提供するためだけにあります(私が理解する限り、間違っていると誰でも修正してください)。

この警告がPycharmのlinterのバグ(おそらく、.pyiファイルの "定義"を参照してはいけない)か、意図した動作かどうかはわかりません。

いずれかの方法で、モジュール機能とにかく、おそらく良い変数名ではありません。

+0

PyCharmスタブになぜ "機能"が存在するのかまだ分かりません。 –

+0

@LaurentLAPORTE JetBrainsに質問する必要がありますが、私の答えで説明したように、何らかの形でヒントを付けるのが最も一般的です。 – DeepSpace

+0

GitHubで[Typeshed](https://github.com/python/typeshed/)のリファレンスが見つかりました。引用: "各Pythonモジュールは' .pyi' "stub"で表されます。これは、すべてのメソッドが空であることを除いて、通常のPythonファイル(つまり、Python 3で解釈可能)です。関数には、Pythonの関数注釈([PEP 3107](https://www.python.org/dev/peps/pep-3107/))があります。" –

1

PY-8672 2014年3月以降、この検査で特定の名前を無視する機能があります。設定を開き、 "Shadowing built-ins"を検索し、検査名をクリックし、オプションセクションを使用して、検査でホワイトリストを作成する必要があります。

関連する問題