Pythonistaのようなコヌド慣甚的なPythonpart0

Kaa、Python
翻蚳者から 

Pythonを孊び始めたばかりです。 最初の知り合いから、蚀語は玠敵なデザむンに満足し、構文の読みやすさずコヌドの理解を保蚌したした。
マスタリングの過皋で、自分のコヌドを曞くずき、Pythonの芳点から遞択したメ゜ッドの正確性を疑うこずがありたす PEP 8-必芁に応じお、 Pythonコヌドのスタむルガむド 。 プログラミングのむデオロギヌを理解するために、Pythonコミュニティでは、すべおの人の喜びに加えお、培底的なドキュメントに加えお、 Pythonヒント、トリック、およびハックずいう蚘事など、倚くのサポヌト資料が既に蓄積されおいたす。
私はDavid Goodgerの蚘事「 本物のPitonistのようなコヌドを曞くPython Idiomatic」 David Goodgerの「Codeista a a PythonistaIdiomatic Python」 が奜きでした 。 最高の同化のために、スキルのおかげで本栌的な翻蚳を䜜成するこずにしたした。それから、Habrず共有するのは賢明なアむデアに思えたした。
翻蚳䜜業䞭に、蚘事がオリゞナルで読んだずきよりもはるかに倧きいこずに気付いたので、Habr蚘事の圢匏から倖れないように、郚分的に投皿したす。
翻蚳の継続ず完了 。





本物のPythonistのようなコヌドを曞くPythonむディオム


デビッド・グッドガヌ
goodger@python.org
http://python.net/~goodger

このむンタラクティブなチュヌトリアルでは、ツヌルキットを確実に拡匵する倚くの重芁なPythonのむディオムず高床なテクニックを取り䞊げたす。
このプレれンテヌションには3぀のバヌゞョンがありたす。

クリ゚むティブコモンズ
アトリビュヌション/ Share-AlikeBY-SAラむセンス。
私に぀いお

このチュヌトリアルをPyCon 2006カンファレンスTextData Processingず呌ばれるで発衚したしたが、䜿甚したいく぀かの方法に察する反応に驚き、よく知られおいるず考えたした。 しかし、倚くのリスナヌは、Pythonプログラマヌが考えずに䜿甚しおいるメ゜ッドを知らなかった。
あなたの倚くは、以前にいく぀かのむディオムずメ゜ッドを芋るこずができたした。 たた、これたでに芋たこずのないいく぀かのコツを孊び、おそらく既に知っおいるものに぀いお䜕か新しいこずを孊ぶず信じおいたす。


Zen Python1


これらはPythonの基本原則ですが、拡匵解釈です。 ナヌモアのセンスは、圌らの正しい理解のために必芁なだけです。
コメディスケッチ団にちなんで名付けられたプログラミング蚀語を䜿甚する堎合、ナヌモアのセンスがあるこずが最善です。

いよりも矎しい。
明瀺的は暗黙的よりも優れおいたす。
単玔なものは耇雑なものよりも優れおいたす。
耇雑さは混乱するよりも優れおいたす。
ネスティングよりフラットの方が優れおいたす。
スパヌスは、デンスよりも優れおいたす。
読みやすさが重芁です。
䟋倖は、芏則を砎るほど䟋倖的ではありたせん。
実甚性は矎しさよりも重芁ですが。
間違いは黙っお通過するべきではありたせん。
明確にdrれおいなければ。
...


Zen Python2


あいたいな堎合は、掚枬する誘惑をあきらめたす。
これを行うには、1぀、できれば1぀だけの明癜な方法が必芁です。
この道は最初は明らかではないかもしれたせんが、オランダ出身でない限り明らかに、Guido van Rossum-およそTransl。、ありがずうsgtpepを意味したす 。
今たでよりも良い。
しばしば今より良いこずはありたせんが。
実装を説明するのが難しい堎合、これは悪い考えです。
実装の説明が簡単な堎合、これはおそらく良い考えです。
名前空間は玠晎らしいアむデアなので、さらに名前空間を䜜りたしょう

—ティムピヌタヌズ
この「詩」は冗談ずしお䜜成されたしたが、実際にはPythonの哲孊に関する倚くの真実が含たれおいたす。
時間の経過ずずもに、Pythoneer Tim PetersはBDFLガむドの原則を20の短い栌蚀に翻蚳したしたが、そのうち19のみが蚘録されたした。
http://www.python.org/dev/peps/pep-0020/

あなたは自分が誰であるかを決めるこずができたすPythoneerたたはPythonista。 これらの単語には関連する意味がありたす。

疑わしい堎合
import this <br/>

むンタラクティブなPythonむンタヌプリタヌでこれを詊しおください
>>> import this <br/>

別のむヌスタヌ゚ッグは次のずおりです。
>>> from __future__ import braces<br/>
File "<stdin></stdin>" , line 1 <br/>
SyntaxError : not a chance<br/>

たくさんのコメディアン :-)


コヌディングスタむル可読性カりントコヌディングスタむル可読性カりント


プログラムは、人が読むために、たた機械による実行のために偶然にのみ曞かれるべきです。
—AbelsonSussman、 コンピュヌタヌプログラムの構造ず解釈「コンピュヌタヌプログラムの構造ず解釈」

プログラムを読みやすく、明確にするようにしおください。

PEP 8Pythonコヌドスタむルガむド


読む䟡倀あり
http://www.python.org/dev/peps/pep-0008/

PEP = Python拡匵提案Python開発の提案
PEPは、Pythonコミュニティに情報を玹介するドキュメントであり、Pythonの新機胜、そのプロセスたたは環境に぀いお説明しおいたす。
Pythonコミュニティには、PEP 8で゜ヌスコヌドがどのように芋えるかを蚘述する独自の暙準がありたす。これらの暙準は、C、C ++、C、Java、VisualBasicなど、他の暙準ずは異なりたす。
Pythonではむンデントずスペヌスが非垞に重芁であるため、Pythonコヌドのスタむルガむドでは暙準むンデントを䜿甚しおいたす。 リヌダヌシップがリヌダヌシップを堅持するのは賢明です..ほずんどのオヌプン゜ヌスプロゞェクトずできればホヌムプロゞェクトもガむドラむンに厳密に埓いたす。


スペヌス1




スペヌス2



def make_squares (key, value = 0‌ ):<br/>
"""Return a dictionary and a list...""" <br/>
d = {key: value}<br/>
l = [key, value]<br/>
return d, l<br/>


呜名




長いコヌド行行ずその継続


コヌドの行の長さは80文字以内にしおください。
括匧内の暗黙的な行拡匵を䜿甚したす。
def __init__ ( self , first, second, third,<br/>
fourth, fifth, sixth):<br/>
output = (first + second + third<br/>
+ fourth + fifth + sixth)<br/>

バックスラッシュを䜿甚
VeryLong . left_hand_side \<br/>
= even_longer . right_hand_side()<br/>

バックスラッシュは慎重に䜿甚しおください。 それらが含たれる行を終了する必芁がありたす。 バックスラッシュの埌にスペヌスを远加するず、機胜しなくなりたす。 したがっお、コヌドが倚少汚染されおいたす。

長い匊


隣接するリテラル文字列文字は、パヌサヌによっお連結されたす。
>>> print 'o' 'n' "e" <br/>
one<br/>

文字間のスペヌスは必芁ありたせんが、コヌドを読みやすくするのに圹立ちたす。 任意のタむプの匕甚笊を䜿甚できたす。
>>> print 't' r'\/\/' """o""" <br/>
t\ / \ / o<br/>

「r」で始たる行は「生」です。 バックスラッシュは、生の行の゚スケヌプ文字ずは芋なされたせん。 これらは、Windowsファむルシステムの正芏衚珟ずパスに䜿甚されたす。
名前付き文字列オブゞェクトは連結しないこずに泚意しおください。
>>> a = 'three' <br/>
>>> b = 'four' <br/>
>>> a b<br/>
File "<stdin>" , line 1 <br/>
a b<br/>
^ <br/>
SyntaxError : invalid syntax<br/>

これは、自動連結がPythonパヌサヌパヌサヌの機胜であり、むンタヌプリタヌの機胜ではないためです。 実行時に行を連結するには、+挔算子を䜿甚する必芁がありたす。

text = ( 'Long strings can be made up ' <br/>
'of several shorter strings.' )<br/>

括匧を䜿甚するず、コヌド行を暗黙的に連結できたす。
耇数行の文字列倀を指定するには、䞉重匕甚笊を䜿甚したす。

"""Triple<br/>
double<br/>
quotes"""
<br/>

'''\<br/>
Triple<br/>
single<br/>
quotes\<br/>
'''
<br/>

最埌の䟋単䞀匕甚笊では、バックスラッシュを䜿甚しお行終了文字を゚スケヌプする方法に泚目しおください。 これにより、巊マヌゞンに揃えられたテキストず匕甚笊を保存するずきに、䞍芁な行終了文字がなくなりたす。 バックスラッシュは、このような各行の最埌にある必芁がありたす。


耇合ステヌトメント



良い
if foo == 'blah' :<br/>
do_something()<br/>
do_one()<br/>
do_two()<br/>
do_three()<br/>

悪い
if foo == 'blah' : do_something()<br/>
do_one(); do_two(); do_three()<br/>

スペヌスずむンデントは、プログラムフロヌの䟿利な芖芚的むンゞケヌタです。 䞊蚘の「Good」コヌドの2行目のむンデントは、条件による䜕かの実行を読者に瀺し、「Bad」にむンデントが存圚しないこずは「if」条件を隠したす。
1行のコヌドに関する倚くのステヌトメントは重倧な眪です。 Pythonでは、 読みやすさが重芁です。



ドキュメントの行ずコメント



ドキュメント行=コヌドの䜿甚方法

コメント= 理由 合理的な正圓化ずコヌドの仕組み
ドキュメント行では、コヌドの䜿甚方法ずコヌドのナヌザヌ向けに説明しおいたす。 ドキュメント行の䜿甚

コメントはその理由を説明し、コヌドのメンテナヌに必芁です。 䟋には、次のような自分甚のメモが含たれたす。
# !!! BUG: ... <br/>
<br/>
# !!! FIX: This is a hack <br/>
<br/>
# ??? Why is this here? <br/>

これらのグルヌプにはどちらもあなたが含たれおいるので、適切なドキュメント行ずコメントを曞いおください 
ドキュメント行は、むンタラクティブにhelpおよび自動ドキュメントシステムに䜿甚されたす。

誀ったコメントずドキュメンテヌション行は、たったくないよりも悪いです。 すぐに保存しおください 倉曎を行うずきは、コメントずドキュメント行がコヌドず䞀臎し、矛盟しないこずを確認しおください。
PEPには、ドキュメンテヌションラむンの芏則党䜓、PEP 257、「Docstringの芏則」がありたす。
http://www.python.org/dev/peps/pep-0257/



実甚性が枅朔さを獲埗



愚かな䞀貫性は、心に近い小さな怪物です愚かな䞀貫性は、小さな心のホブゎブリンです。
—ラルフ・りォルド・゚マヌ゜ン

 hobgoblin 迷信的なもの
泚transl。私が理解しおいるように、意味は「神に祈るために愚か者を教える-圌は額を折る」
垞に䟋倖がありたす。 PEP 8から
矛盟が生じた堎合、それは非垞に重芁です-マニュアルに埓うこずが単に受け入れられないこずが起こりたす。 疑わしい堎合は、あなたの意芋に最適な゜リュヌションを䜿甚しおください。 他の䟋を芋お、どちらの芖点が良いかを決めおください。 お気軜にお問い合わせください
受け入れられおいるルヌルを砎る2぀の理由
  1. ルヌルに埓うず、ルヌルに埓うこずに慣れおいる人でも、コヌドは読みにくくなりたす。
  2. 呚囲のコヌドに準拠するために、違反するこずも可胜ですこれは歎史的な理由による可胜性がありたす-混乱を招く可胜性がありたす本圓のXPスタむルeXtreme Programming-泚Transl。。



...しかし、実甚性は垞に枅朔さを劚げるべきではありたせん

むディオムのポプリ


小さくお䟿利なむディオムの遞択。
次に、チュヌトリアルの䞻芁郚分である倚くのむディオムに進みたす。
簡単なものから始めお、埐々にレベルを䞊げおいきたす。



䟡倀の亀換


他の蚀語で
temp = a<br/>
a = b<br/>
b = temp<br/>

Pythonの堎合
b, a = a, b<br/>

これを芋たこずがあるかもしれたせん。 しかし、これがどのように機胜するか知っおいたすか


右偎は、巊偎のタプルの名前で展開されたす。
その他の開梱䟋
>>> l = [ 'David' , 'Pythonista' , '+1-514-555-1234' ]<br/>
>>> name, title, phone = l<br/>
>>> name<br/>
'David' <br/>
>>> title<br/>
'Pythonista' <br/>
>>> phone<br/>
'+1-514-555-1234' <br/>

構造化デヌタの凊理に圹立぀ルヌプ

䞊蚘でリストを䜜成したしたDavidの情報。 people-2぀の芁玠を含む人々のリスト。各芁玠は3぀の芁玠のリストです。
>>> people = [l, [ 'Guido' , 'BDFL' , 'unlisted' ]]<br/>
>>> for (name, title, phone) in people:<br/>
... print name, phone<br/>
... <br/>
David + 1 - 514 - 555 - 1234 <br/>
Guido unlisted<br/>

各people芁玠は、フォヌム名前、圹職、電話番号のタプルに展開されたした。
構造を巊右に䞀臎させるこずを忘れないでください
>>> david, (gname, gtitle, gphone) = people<br/>
>>> gname<br/>
'Guido' <br/>
>>> gtitle<br/>
'BDFL' <br/>
>>> gphone<br/>
'unlisted' <br/>
>>> david<br/>
[ 'David' , 'Pythonista' , '+1-514-555-1234' ]<br/>



タプルの詳现


カンマがかっこなしのタプルコンストラクタである方法を確認したした。 䟋
>>> 1 ,<br/>
( 1 ,)<br/>

Pythonむンタヌプリタヌは、わかりやすくするために括匧を瀺しおいたす。これらも䜿甚するこずをお勧めしたす。

>>> ( 1 ,)<br/>
( 1 ,)<br/>

コンマを忘れないでください
>>> ( 1 )<br/>
1 <br/>

単䞀芁玠のタプルには、末尟のコンマが必芁です。 2+タプルでは、​​末尟のコンマはオプションです。 0タプルたたは空のタプルでは、​​䞀察の括匧は短瞮構文です。
>>> ()<br/>
()<br/>

>>> tuple ()<br/>
()<br/>

䞀般的なタむプミスは、タプルを䜜成したくない堎合でも、コヌドにカンマを残すこずです。 コヌドで簡単にスキップできたす
>>> value = 1 ,<br/>
>>> value<br/>
( 1 ,)<br/>

したがっお、埅機しおいないタプルが衚瀺された堎合は、コンマを探しおください


むンタラクティブな「_」



これは本圓に䟿利な機胜であり、それを知っおいる人がほずんどいないこずは驚くべきこずです。

むンタプリタのむンタラクティブモヌドでは、匏たたは関数呌び出しを詊みるたびに、結果は䞀時倉数_アンダヌスコアに保存されたす。

>>> 1 + 1 <br/>
2 <br/>
>>> _<br/>
2 <br/>

_は、 printコマンドによっお最埌に印刷された匏を保存したす。 䟿利です
ただし、むンタヌプリタヌの察話モヌドでのみ機胜し、モゞュヌルでは機胜したせん。

タスクをむンタラクティブに操䜜しおいお、次のステップのために結果を保存したい堎合に特に䟿利です。

>>> import math <br/>
>>> math . pi / 3 <br/>
1.0471975511965976 <br/>
>>> angle = _<br/>
>>> math . cos(angle)<br/>
0.50000000000000011 <br/>
>>> _<br/>
0.50000000000000011 <br/>



郚分文字列から文字列を䜜成する


行のリストから始めたしょう
colors = [ 'red' , 'blue' , 'green' , 'yellow' ]<br/>

すべおの行を1぀の倧きな行に結合したす。 特に郚分文字列が倚い堎合...

これをしないでください
result = '' <br/>
for s in colors:<br/>
result += s<br/>

非垞に非効率的です。

これはひどくメモリを消費し、パフォヌマンスを䜎䞋させたす。 合蚈は、各䞭間ステップでオブゞェクトを蚈算、保存、および砎棄したす。


代わりに、これを行いたす
result = '' . join(colors)<br/>

join文字列メ゜ッドは、1回のパスですべおのコピヌを実行したす。
数十行たたは数癟行を扱う堎合、これは目立った違いをもたらしたせん。 しかし、回線を効率的に収集するこずに慣れおください。䜕千もの回線を䜿甚しお、ルヌプで䜜業しおいるずきに勝぀こずができるからです。



匊楜噚の構成、バリ゚ヌション1


joinメ゜ッドを䜿甚するいく぀かの方法を以䞋に瀺したす。

サブストリング間にスペヌスを入れたい堎合
result = ' ' . join(colors)<br/>

たたはコンマずスペヌス
result = ', ' . join(colors)<br/>

䞀般的な堎合
colors = [ 'red' , 'blue' , 'green' , 'yellow' ]<br/>
print 'Choose' , ', ' . join(colors[: - 1 ]), \<br/>
'or' , colors[ - 1 ]<br/>

文法的に正しい文を䜜成するには、すべおの倀の間にコンマを入れ、最埌の単語の前に「たたは」ずいう単語を眮きたす。 ここでは、スラむスの構文が圹立ちたす。 「Slice to -1」[-1]は、最埌から2番目の芁玠のむンデックスを提䟛したす。これは、コンマで区切っおスペヌスでアタッチしたす。
もちろん、リストの長さが0たたは1の堎合、このコヌドは機胜したせん。

結論
Choose red, blue, green or yellow<br/>


匊の構成、バリ゚ヌション2


サブストリングを生成する関数を適甚する必芁がある堎合
result = '' . join(fn(i) for i in items)<br/>

これはゞェネレヌタ匏を䜿甚したす。これに぀いおは埌で説明したす。

郚分文字列を段階的に蚈算する必芁がある堎合は、たずリストでそれらを収集したす。
items = []<br/>
... <br/>
items . append(item) # many times <br/>
... <br/>
# items is now complete <br/>
result = '' . join(fn(i) for i in items)<br/>

結合文字列メ゜ッドを適甚できるように、パヌツをリストに入れたす
より効率的に。





翻蚳の第二郚



Source: https://habr.com/ru/post/J88972/


All Articles