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


773

C#の背景から来た場合、変数とメソッド名の命名規則は通常、キャメルケースまたはパスカルケースのいずれかです。

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

Pythonでは、上記を確認しましたが、アンダースコアが使用されていることも確認しました。

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

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

回答:


867

Python PEP 8:関数と変数名を参照してください。

関数名は小文字にする必要があり、読みやすくするために必要に応じて単語をアンダースコアで区切ってください。

変数名は、関数名と同じ規則に従います。

mixedCaseは、下位互換性を維持するために、それがすでに一般的なスタイル(例:threading.py)であるコンテキストでのみ許可されます。


127
PEP = Python Enhancement Proposal。
Peter Mortensen、

8
@RickyRobinson下線が単語を続けることを知らない、あなたはどんな頭の悪いコードエディタを使っていますか?無料のものがたくさんあります。IDEが利用できない場合は、Notepad ++を使用します。そのために、Python編集用のテンプレートをダウンロードできます。(他のユーザーは、さらに便利な無料ダウンロードを推奨できます。)
ToolmakerSteve

57
アンダースコアスタイルの1つのケースは、1文字の単語をよりよく使用できることです。(かなりばかげた)例の場合、findMeAClassはおそらくより醜いですfind_me_a_class
heltonbiker 14年

9
すべて小文字の変数名の規則は、科学的計算では適切ではないことがわかります。科学計算では、よく知られた定数、テンソルなどが大文字で示されることがよくあります。
andreasdr 2014年

12
@rr PEP8は「スタイルガイド」であり、標準ではなく規約として記述されています。また、これらの「規則」を常に順守しない理由についても明確に説明しています。
タハーン島2015年

710

GoogleのPythonのスタイルガイドは、次の規則があります。

module_namepackage_nameClassNamemethod_nameExceptionNamefunction_nameGLOBAL_CONSTANT_NAMEglobal_var_nameinstance_var_namefunction_parameter_namelocal_var_name

同様の命名規則を CLASS_CONSTANT_NAME


37
a)例が大好きです-ありがとう。b)CamelCaseとアンダースコアの魅力のない混合物?しかし:Pythonとそのより柔軟なデータモデルが初めてなので、Googleのガイドの背後にしっかりした考え方があると思います...
Matthew Cornell

19
@MatthewCornellのミキシングは、あなたがそれに固執している限り、悪くない。関数にはアンダースコアがあり、クラスにはアンダースコアがないことがわかっている場合は、実際に読みやすくなります。
Pithikos 2014

1
@MatthewCornell私はそれがPythonと関係があるとは思いません。Goは実際には任意の美しさの基準を適用しており、たとえば中括弧の規則に従わないとコンパイルに失敗します。基本的に、それは誰かが実際に慎重に考えていたのか、それとも彼らのやり方を本当に愛していたのかに関するサイコロです。
パルティアンショット

定数静的属性をGLOBAL_CONSTANT_NAMEと見なしますか?クラスのスコープ内にあるため、正確にはグローバルではありません。
James T.

その後に歩くpropertyおそらくそれが実際に何であるのではなく、項目があることをふりをされて何の問題だ...
joelb

240

David Goodger(ここの「Pythonのようなコード」内)は、PEP 8の推奨事項を次のように説明しています。

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

  • joined_lowerまたはALL_CAPS定数の場合

  • StudlyCaps クラス用

  • camelCase 既存の規約にのみ準拠


3
+1の視覚的な例。PEP8が定数を提案joined_lowerする場所はわかりませんが、「アンダースコアで単語を区切るすべての大文字」のみです。新しい列挙型機能についても興味があります。
Bob Stein

1
StudlyCaps for classesほぼすべての言語のクラスに対応する優れた普遍的なルールです。では、なぜ一部のpython組み込みクラスがあるのですか(datetime.datetimeこの規則に従わないなど)
Prahlad Yeri

3
@PrahladYeri:残念ながら、unittest.TestCase.assertEqualそして友達もsnake_caseの慣例に従っていない。真実は、規約が固まる前にPython標準ライブラリの一部が開発されたということです。
wchargin

3
CamelCaseは "camelCase"( "mixedCase"とも呼ばれる)と言う人もいれば "CamelCase"( "StudlyCaps"とも呼ばれる)と言う人もいるので混乱しています。たとえば、PEPは「CamelCase」に言及しているが、「camelCase」に言及している。
プロQ

あなたのヒアリンク
Wolf

42

Pythonのコードのためのスタイルガイドは、認めています

Pythonのライブラリの命名規則は少し混乱しているので、これを完全に一貫させることは決してありません

これはPythonの標準ライブラリのみを指していることに注意してください。彼らがその一貫性を得ることができない場合、すべての Pythonコードに対して一般に固執する規則を持つことはほとんど期待できません。

そのことと、ここでの議論から、Pythonに渡るときに変数や関数にJavaやC#(明確で十分に確立された)などの命名規則を使い続ければ、それは恐ろしい罪ではないと推測します。もちろん、コードベース/プロジェクト/チームの一般的なスタイルを遵守するのが最善であることを覚えておいてください。Pythonスタイルガイドで指摘されているように、内部の一貫性が最も重要です。

異端者として私を解任してください。:-) OPのように、私はまだ「Pythonista」ではありません。


32

ありPEP 8は、他の回答が示すように、しかし、PEP 8は、標準ライブラリのための唯一のスタイルガイドであり、それが唯一の福音、その中としています。他のコードに対するPEP 8の最も頻繁な逸脱の1つは、特にメソッドに対する変数の命名です。単一の優勢なスタイルはありませんが、mixedCaseを使用するコードの量を考慮すると、厳密な国勢調査を行うと、mixedCaseを備えたPEP 8のバージョンになる可能性があります。他にPEP 8からの逸脱はほとんどありません。


9
これは答えられた'08年には真実だったかもしれませんが、今日ではほとんどすべての主要なライブラリがPEP 8の命名規則を使用しています。
Thane Brimhall、2015年

28

言及したように、PEP 8はlower_case_with_underscores変数、メソッド、関数に使用するように言っています。

私が使って好みlower_case_with_underscoresの変数にし、mixedCaseメソッドや関数のコードがより明確と読みやすくなります。したがって、Zen of Pythonの「明示的は暗黙的よりも優れている」と「読みやすさのカウント」に従うこと


3
+1これら2つを切り替えます(変数にはmixedCaseを使用します)が、そのようにすべてをより明確にすると、特に関数を渡すことができるため、処理している内容がすぐにわかります。
Xiong Chiamiov 2009

2
「読みやすさ」は非常に主観的ですが。下線付きのメソッドが読みやすくなっています。
ピティコス2014

あなたの好みは、何年ものJava開発から来た私の最初の直感でした。変数に_を使用するのが好きですが、目から見ると、関数とメソッドは少しおかしく見えます。
Michael Szczepaniak

21

@JohnTESladeの回答に加えて。Googleのpythonスタイルガイドには、かなりきちんとした推奨事項があります。

避けるべき名前

  • カウンターまたはイテレーターを除く1文字の名前
  • パッケージ/モジュール名のダッシュ(-)
  • \__double_leading_and_trailing_underscore__ names (Pythonで予約)

命名規則

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

グイドの勧告から導き出されたガイドライン ここに画像の説明を入力してください


17

ほとんどのpythonの人々はアンダースコアを好みますが、私は現在5年以上前からpythonを使用していますが、それでも好きではありません。見た目は醜いですが、頭の中にあるJavaはそれだけかもしれません。

CamelCaseは、クラスの名前の付け方によく合うので、単に好きSomeClass.doSomething()ですSomeClass.do_something()。Pythonのグローバルモジュールインデックスを見回すと、両方が見つかります。これは、時間の経過とともに成長したさまざまなソースからのライブラリのコレクションであり、厳密なコーディングルールを持つSunのような1つの会社によって開発されたものではないためです。 。肝心なことは、あなたがより好きなものを使用することです。それは個人的な好みの問題です。


10
私はJavaの出身ですが、アンダースコアは冗長で魅力的ではなく、後者だけが意見です。ネーミングは、いくつかの点で読みやすさと簡潔さのバランスです。Unixは行き過ぎですが、そのen.wikipedia.org/wiki/Domain-specific_languageは制限されています。CamelCaseは大文字なので読みやすいですが、余分な文字はありません。2c
マシューコーネル

2
私にとって、アンダースコアは仮想の(私の頭の中で)名前空間の区切り文字としてすべてのアンダースコアを見るので、関数/メソッドでは魅力的です。そのように私は簡単に私の新しい関数/メソッドに名前を付ける方法を知ることができます:make_xpath_predicatemake_xpath_exprmake_html_headermake_html_footer
Pithikos

3
通常は呼び出さない(通常、SomeClass.doSomething()静的メソッドはまれです)an_instance.do_something()
Dave

15

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


15
キャメルケースは、「camelCase」のように小文字のIIRCで始まります。
UnkwnTech

11
crystalatticeはそれが正しかったと思います-少なくとも、彼の使用法はPEP8(CamelCaseとmixedCase)の使用法と一致しています。
Jarrett

1
@UnkwnTech FirstLetterUpperの用語はPascalCaseと呼ばれることもあります
SurpriseDog

CamelCaseまたはcamelCase?justWondering。
Sumit Pokhrel

11

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

TL; DRこれは、snake_caseがcamelCaseより読みやすいことを示しています。だからこそ、現代​​の言語はどこでもヘビを使用します(または使用する必要があります)。


9
興味深いことに、「この研究の結果は、必ずしもソースコードに埋め込まれた識別子には適用されない場合があります。キャメルケースの識別子は、プログラミング構造の中に埋め込まれたときに、より良いゲシュタルト要素として機能する可能性があります。」
rob3c 2016年

2

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


0

他のプログラミング言語で開発する場合、Javaの命名規則は一貫性があり、理解しやすいため、私は個人的に使用しています。そうすれば、プロジェクトの最も難しい部分ではないはずの、どのような規則を使用するかについて絶えず苦労することはありません。


ややそう思う。言語Xがプロジェクトのごく一部である場合、テキストのフォーマット方法のコンテキスト切り替えが負担になる可能性があります。主な問題は、ライブラリが1つのスタイル(library_function(my_arg))で呼び出すことです。
Lan

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.