web-dev-qa-db-ja.com

Pythonの変数名と関数名の命名規則は何ですか?

C#の背景から来る変数とメソッド名の命名規則は通常CamelCaseかPascal Caseのどちらかです:

// C# example
string thisIsMyVariable = "a"
public void ThisIsMyMethod()

Pythonでは、上記を見ましたが、アンダースコアも使われています。

# python example
this_is_my_variable = 'a'
def this_is_my_function():

Pythonにもっと好ましい、決定的なコーディングスタイルはありますか?

657
Ray Vega

Python PEP 8 を参照してください。

読みやすくするために、必要に応じて関数名は小文字にし、単語はアンダースコアで区切ります。

mixedCaseは、すでに一般的なスタイルである文脈でのみ許可されています

変数...

読みやすさを向上させるために、必要に応じて、関数命名規則を使用してください。単語は小文字でアンダースコアで区切ります。

私自身のプロジェクトではlower_caseよりmixedCaseを好むので、個人的には、これとは異なります。

768
S.Lott

Google Pythonスタイルガイド の規則は次のとおりです。

module_name、package_name、ClassName、method_name、ExceptionName、function_name、GLOBAL_CONSTANT_NAME、global_var_name、instance_var_name、function_parameter_name、local_var_name

同様の命名体系をCLASS_CONSTANT_NAMEに適用する必要があります。

593
JohnTESlade

David Goodger( "Code Like a Pythonista" here )では、PEP 8の推奨事項を次のように説明しています。

  • 関数、メソッド、属性、変数のjoined_lower

  • 定数の場合はjoined_lowerまたはALL_CAPS

  • クラスのStudlyCaps

  • 既存の規則に準拠するためだけのcamelCase

217
unmounted

スタイルガイドとしてのPythonコード は認めている、

Pythonのライブラリの命名規則はちょっと面倒ですので、これを完全に一貫性のあるものにすることは決してありません。

これはPythonの標準ライブラリだけを参照していることに注意してください。もし彼らがthatを矛盾させることができないのであれば、all Pythonコードに対して一般的に遵守されている規約を持つという希望はほとんどないでしょう。

それから、そしてここでの議論から、Pythonに渡るときに変数や関数に例えばJavaやC#の(明確で確立された)命名規則を使い続けるのであれば、それは=恐ろしい罪ではない)と思います。 Pythonスタイルガイドが指摘しているように、内部の一貫性は最も重要なことです。

異端者として私を解雇してください。 OPと同じように、私は「Pythonista」ではありません。

38
Jonik

他の答えが示すように、 PEP 8 がありますが、PEP 8は標準ライブラリのスタイルガイドに過ぎず、その中の福音書としてのみとられています。他のコードに対してPEP 8から最も頻繁に逸脱しているものの1つは、特にメソッド用の変数の命名です。厳密な国勢調査を行う場合、mixedCaseを使用するコードの量を考慮すると、優勢なスタイルは1つもありません。おそらく、PEP 8のmixedCaseを使用することになるでしょう。 PEP 8からの他の違いはほとんどなく、それは一般的です。

32
Thomas Wouters

すでに述べたように、PEP 8は変数、メソッド、そして関数にlower_case_with_underscoresを使うように言っています。

変数にlower_case_with_underscoresを、メソッドや関数にmixedCaseを使用すると、コードがより明確で読みやすくなります。したがって、Pythonの Zenに従う "明示的な方が暗黙的よりも優れている"、そして "読みやすさのカウント"

28
claytron

個人的にはクラス、mixedCaseのメソッドや関数にCamelCaseを使うようにしています。変数は通常、アンダースコアで区切られています(覚えていると思いますが)。こうすれば、すべてが同じように見えるのではなく、自分が何を呼んでいるのか一目でわかります。

16
crystalattice

ほとんどのpythonの人々はアンダースコアを好みますが、私は今から5年以上も前からpythonを使っていますが、それでも好きではありません。彼らは私には醜く見えますが、多分それは私の頭の中のすべてのJavaです。

キャメルケースは、クラスの命名方法により適しているので、私は単に好きです。SomeClass.doSomething()よりSomeClass.do_something()のほうが論理的に感じます。 pythonのグローバルモジュールインデックスを見れば、その両方が見つかります。これは、時間の経過とともに成長するさまざまなソースからのライブラリのコレクションであり、Sunのような厳密なコーディング規則を用いて開発されたものではないためです。 。私は一番下の行を言うだろう:あなたが好きなものは何でも使用してください、それは単に個人的な好みの問題です。

14
André

@JohnTESladeが答えたものにさらに。 グーグルのPythonスタイルガイド はかなりすっきりした勧告を持っている、

避けるべき名前

  • カウンタまたはイテレータを除く単一文字の名前
  • 任意のパッケージ/モジュール名のダッシュ( - )
  • \__double_leading_and_trailing_underscore__ names(Pythonによって予約されています)

命名規則

  • 「内部」とは、モジュールの内部、またはクラス内で保護されているかプライベートであることを意味します。
  • 単一のアンダースコア(_)を前に付けると、モジュール変数と関数を保護するためのサポートがあります(import * fromには含まれていません)。インスタンス変数またはメソッドの前に二重下線(__)を付けると、変数またはメソッドはそのクラスに対してプライベートになります(名前マングリングを使用)。
  • 関連クラスと最上位関数をモジュールにまとめます。 Javaとは異なり、モジュールごとに1つのクラスに制限する必要はありません。
  • クラス名にはCapWordsを、モジュール名にはlower_with_under.pyを使用してください。 CapWords.pyという名前の既存のモジュールがたくさんありますが、モジュールの名前がクラスの後に付けられると混乱するため、これはお勧めできません。 ( "待つ - 私はimport StringIOfrom StringIO import StringIOを書きましたか?")

Guidoのリコメンデーションから導き出されたガイドライン enter image description here

14
Sufiyan Ghori

これについての論文があります: http://www.cs.kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf

TL; DR snake_caseはcamelCaseより読みやすいと言っています。それが、現代の言語が可能な限りどこでもヘビを使用する(または使用すべきである)理由です。

8
alebian

コーディングスタイルは通常、組織の内部ポリシー/規約の標準の一部ですが、私は一般的に、all_lower_case_underscore_separatorスタイル(snake_caseとも呼ばれる)がPythonで最も一般的であると思います。

3
fuentesjr

他のプログラミング言語で開発するときは、一貫性があり従うのが簡単なので、私は個人的にJavaの命名規則を使用しています。そうすれば、私がプロジェクトの中で最も難しい部分ではない、どの規約を使用するかについて、常に苦労することはありません!

1
BradyLange

通常、言語の標準ライブラリで使用されている規則に従います。

0
yfeldblum