いくつかの実用的なpythonic構文
pythonは簡単で優雅な言語で、簡単すぎるかもしれませんが、あまり勉強しなくても使えます.実はpythonにはいくつかの良い特性があり、コードの論理を大幅に簡略化し、コードの可読性を高めることができます.
pythonicについては、端末でpythonを開き、
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
ジェネレータyieldの使用
ジェネレータはpythonの中で非常に有用な文法特性ですが、最も無視されやすいもので、ジェネレータが使える場所の大部分がリストを使うことができるからかもしれません.
ジェネレータは単純に1つの関数として理解でき、yield文を実行するたびに1つの値を返し、この関数を呼び出し続けることですべての値を取得することができ、これらの値は等価なリストを構成することができるが、リストとは異なり、これらの値は絶えず計算され、リストは最初から計算され、これがlazy evaluationの考えです.このプロパティは、大きなデータ処理など、データ量の多いシーンで非常に役立ちます.一度にすべてのファイルをロードできない場合は、メモリオーバーフローを心配することなく、ジェネレータを使用して1行1行処理できます.
else句でループと例外を簡略化
with句でリソースを自動的に管理する
開いたファイルは使い終わった後に閉じる必要があることはよく知られていますが、リソースの漏洩を招く可能性がありますが、実際にプログラミングするときは閉じることを忘れがちです.特に論理的に複雑なシーンでは、pythonには優雅な解決策があります.それはは、 を呼び出す.は に与える.は、 を実行する.実行 このプロセスに異常が発生すると、 を実行し続ける.
リストの導出とジェネレータ式
リストの導出
ジェネレータ式
itemsでmapを巡る
pythonではmapの遍歴にはいろいろな方法がありますが、同僚がkeyとvalueを使う必要がある場合は
リファレンスリンク Google python言語仕様:http://zh-google-styleguide.r... 『高品質コードを書く:Pythonプログラムを改善する91の提案』 転載は出典を明記してください
このリンクは次のとおりです.
http://hatlonely.github.io/20...
pythonicについては、端末でpythonを開き、
import this
を入力して出力を見てみましょう.これはTim Petersの《The Zen of Python》です.この詩的な詩編にはpythonの設計哲学が概況されていますが、これらの思想は、実際にはすべての言語で基本的に通用しています.Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
ジェネレータyieldの使用
ジェネレータはpythonの中で非常に有用な文法特性ですが、最も無視されやすいもので、ジェネレータが使える場所の大部分がリストを使うことができるからかもしれません.
ジェネレータは単純に1つの関数として理解でき、yield文を実行するたびに1つの値を返し、この関数を呼び出し続けることですべての値を取得することができ、これらの値は等価なリストを構成することができるが、リストとは異なり、これらの値は絶えず計算され、リストは最初から計算され、これがlazy evaluationの考えです.このプロパティは、大きなデータ処理など、データ量の多いシーンで非常に役立ちます.一度にすべてのファイルをロードできない場合は、メモリオーバーフローを心配することなく、ジェネレータを使用して1行1行処理できます.
def fibonacci():
num0 = 0
num1 = 1
for i in range(10):
num2 = num0 + num1
yield num2
num0 = num1
num1 = num2
for i in fibonacci():
print(i)
else句でループと例外を簡略化
if / else
はみんな使ったことがありますがpythonではelse
はループや異常にも使えます# pythonic
for cc in ['UK', 'ID', 'JP', 'US']:
if cc == 'CN':
break
else:
print('no CN')
#
no_cn = True
for cc in ['UK', 'ID', 'JP', 'US']:
if cc == 'CN':
no_cn = False
break
if no_cn:
print('no CN')
else
がループの中に入っているのは、ループがすべてループして完了し、break
が実行されなければ、else
句が実行されるという意味です.# pythonic
try:
db.execute('UPDATE table SET xx=xx WHERE yy=yy')
except DBError:
db.rollback()
else:
db.commit()
#
has_error = False
try:
db.execute('UPDATE table SET xx=xx WHERE yy=yy')
except DBError:
db.rollback()
has_error = True
if not has_error:
db.commit()
else
異常の中に入れて表示することができて、もし異常が発生して実行する操作がなければwith句でリソースを自動的に管理する
開いたファイルは使い終わった後に閉じる必要があることはよく知られていますが、リソースの漏洩を招く可能性がありますが、実際にプログラミングするときは閉じることを忘れがちです.特に論理的に複雑なシーンでは、pythonには優雅な解決策があります.それは
with
句です.# pythonic
with open('pythonic.py') as fp:
for line in fp:
print(line[:-1])
#
fp = open('pythonic.py')
for line in fp:
print(line[:-1])
fp.close()
with as
文を使用すると、fp.close()
を手動で呼び出す必要はありません.役割ドメインが終了すると、ファイルは自動closeによって削除され、以下のように完全に実行されます.open('pythonic.py')
を呼び出し、返されるオブジェクトobj
、obj.__enter__()
メソッドを呼び出し、返された値はfp
with
のコードブロックobj.__exit__()
obj.__exit__()
に異常が伝達され、obj.__exit__()
がFalse
に戻ると、異常は放出され続け、True
に戻ると、異常が停止すると、プログラムはリストの導出とジェネレータ式
リストの導出
[expr for iter_var in iterable if cond_expr]
ジェネレータ式
(expr for iter_var in iterable if cond_expr)
リストの導出とジェネレータ式は、リストまたは反復器を作成するための非常に簡潔で効率的な方法を提供します.# pythonic
squares = [x * x for x in range(10)]
#
squares = []
for x in range(10):
squares.append(x * x)
itemsでmapを巡る
pythonではmapの遍歴にはいろいろな方法がありますが、同僚がkeyとvalueを使う必要がある場合は
items()
関数を使うことをお勧めします.m = {'one': 1, 'two': 2, 'three': 3}
for k, v in m.items():
print(k, v)
for k, v in sorted(m.items()):
print(k, v)
リファレンスリンク
このリンクは次のとおりです.
http://hatlonely.github.io/20...