2017-01-14 12 views
0

に建設のための変数名の後に、私は次の例を持っている/前に「_」の追加:機能やシャドウ名

def get_max_close(symbol): # Example 1 
    df = pd.read_csv("../../ml4t/data/{}.csv".format(symbol)) 
    get_max = df["Close"].max() 
    res = {symbol: float(get_max)} 
    return res 


if __name__ == "__main__": 
    symbol = ["AAPL", "IBM"] # Example 2 
    max_close = {"Max": [get_max_close(s) for s in symbol]} 
    print max_close 

私の例1は、次の問題を示しています

This inspection detects shadowing names defined in outer scopes 

例2は、同じ名前の外側スコープ変数です。私はコードを変更したくないのですが、PEPの1つでこの変数に_を追加することができます。

私はまた、(キャメルケーシングが機能するのと同じように)その内容を読むことを思い出しています。

私は変数名(すなわち_symbol)の前に_を配置するのがこれを達成する正しい方法だと考えています。後に置くのは、組み込み関数(つまり、dict_)と同じ名前の変数があるときだけです。

私はこれら2つを混ぜていますか?そして、あなたは私に関連するpepへのURLを提供できますか? https://www.python.org/dev/peps/ ...

答えて

5

ここで修正する必要はありません。あなたのIDEの警告であるは、Pythonではありません。

IDEは、symbolという名前がグローバル(__name__ == '__main__'ブロック内)とget_max_close()機能のローカルとして使用されていることを指摘しています。これは細いであり、心配する必要はありません。

アドバイスはPythonの自体によって提供されている名前、listidstrまたはallようビルトイン名を、使用して目指しています。変数の名前をid_またはall_に変更して、組み込み関数を使用しようとするリスクを回避することができます。それは単にここではそうではありません。

_symbolという名前を使用した場合、その名前が実装のプライベートとみなされることを告知しています(例:コードを使用する人は、将来のバージョンで同じフォームに存在する名前に頼らないでください)。

には、symbol_を使用すると、がありません。私はちょうどsymbolに固執したい、それはローカルのための完全に有効な名前であり、IDEはここで過熱されている。

あなたが考えているPEPは、どのNaming Styles section状態でPEP 8 – Style Guide for Python Code次のとおりです。

  • _single_leading_underscore:弱い "内部使用" インジケータ。例えば。 from M import *は、名前がアンダースコアで始まるオブジェクトをインポートしません。

  • single_trailing_underscore_:Pythonキーワードとの競合を回避するために慣習で使用されています。

    Tkinter.Toplevel(master, class_='ClassName')