Pythonの中であれらのPythonicの書き方は詳しく説明します。


前言
マーティン(ボブおじさん)は「コードのきれいな道」という本で冗談を言っていました。コードがコードコードを作っている時に、審査者が怒って「コードのきれいな道」と叫びました。
What the fuck is this shit?
「Dude、What the fuck!」
激しい言葉を待っているときは、あなたが書いたコードはBad Codeです。もし審査者が無神経に吐き出すだけなら、いくつかのコードを教えてくれます。
「What the fuck?」
あなたが書いたのはGood Codeです。コードの品質を測る唯一の基準は、毎分「WTF」とののしる頻度です。
エレガントで清潔なコードは、通常、ドキュメントとコメントのプロパティを持参します。コードを読むのは、著者のアイデアです。Pythonの開発ではJavaのように開発の原則としていくつかの設計パターンを適用することはめったにないです。結局、デザインモードは一つの実現手段であり、コードがはっきりしているのが最終目的です。Pythonは柔軟で優雅さを失わないです。これはなぜPythonがgeekの好感を深く受けられる原因の一つです。
前回書きました。何がもっと優雅にpythonコードを書きますか?のように、今日はこの話題を続けてPythonicの書き方を書きます。レンガを投げて玉を引くことができるように。
1、チェーン比較操作

age = 18
if age > 18 and age < 60:
print("young man")
pythonic

if 18 < age < 60:
print("young man")
チェーンの比較操作を理解したら、なぜこのラインのコードが出力されたかを知るべきです。結果はFalseです。

>>> False == False == True 
False
2、if/else三目演算

if gender == 'male':
text = ' '
else:
text = ' '
pythonic

text = ' ' if gender == 'male' else ' '
C類の言語では、三目演算をサポートしています。b?x:y、Pythonの禅には、このような言葉があります。
「The e e shoud be one--and preferably onlyone--ovious way to do it」。
if/elseで論理をはっきり表現できる場合、もう一つの方法を追加して実現する必要はない。
3、真価判断
ある対象が本物かどうかをチェックする時、TrueとFalseと比較すると余計なことになります。専門ではありません。

if attr == True:
do_something()
if len(values) != 0: #         
do_something()
pythonic

if attr:
do_something()
if values:
do_something()
真贋値対照表:
タイプFalse True
ブールFalse(0と等価)True(1と等価)
文字列'(空の文字列)は空の文字列ではありません。例えば'、'blog'です。
0、0.0は0ではない数値です。例えば、1、0.1、−1、2
コンテナ[],()少なくとも一つの要素の容器オブジェクトがあります。例えば、[0],(None,),[']
None NoneはNoneの対象ではない。
4、for/else文
for elseはPythonに特有の文法形式であり、elseのコードはforループですべての要素を巡回した後に実行されます。

flagfound = False
for i in mylist:
if i == theflag:
flagfound = True
break
process(i)
if not flagfound:
raise ValueError("List argument missing terminal flag.")
pythonic

for i in mylist:
if i == theflag:
break
process(i)
else:
raise ValueError("List argument missing terminal flag.")
5、文字列の書式設定

s1 = "foofish.net"
s2 = "vttalk"
s3 = "welcome to %s and following %s" % (s1, s2)
pythonic

s3 = "welcome to {blog} and following {wechat}".format(blog="foofish.net", wechat="vttalk")
formatは%sのコード量より少ないとは言いにくいですが、formatの方が分かりやすいです。
「Explicit is better than implicit---Zen of Python」
6、リストスライス
リストの一部の要素を取得するには、まず最初に考えたのは、条件に応じてforループで元素を抽出することです。これは他の言語でも慣用的な手段です。Pythonには、強力なスライス機能があります。

items = range(10)
#   
odd_items = []
for i in items:
if i % 2 != 0:
odd_items.append(i)
#   
copy_items = []
for i in items:
copy_items.append(i)
pythonic

#  1  4        
sub_items = items[1:4]
#   
odd_items = items[1::2]
#  
copy_items = items[::]    items[:]
リスト要素の下付き文字は正の値だけではなく、負の値でも表します。最後の要素の位置は-1で、右から左に、順次減少します。

--------------------------
| P | y | t | h | o | n |
--------------------------
 0 1 2 3 4 5 
 -6 -5 -4 -3 -2 -1
--------------------------
7、善用ジェネレータ

def fib(n):
a, b = 0, 1
result = []
while b < n:
result.append(b)
a, b = b, a+b
return result
pythonic

def fib(n):
a, b = 0, 1
while a < n:
yield a
a, b = b, a + b
上はジェネレータでフィボナッチの数列を生成します。生成器の利点は、一度にすべての要素をメモリにロードする必要がなく、反復的に要素を取得したときにのみこの要素に戻ります。リストは一度にすべての要素をメモリにロードしておきました。また、yieldコードを使うと、より鮮明に見えます。
8、辞書要素を取得する

d = {'name': 'foo'}
if d.has_key('name'):
print(d['name'])
else:
print('unkonw')
pythonic

d.get("name", "unknow")
9、プリセット辞書のデフォルト値
keyパケットを通じて、keyが辞書に存在しているかどうかを確認しなければならない。

data = [('foo', 10), ('bar', 20), ('foo', 39), ('bar', 49)]
groups = {}
for (key, value) in data:
if key in groups:
groups[key].append(value)
else:
groups[key] = [value]
pythonic

#      
groups = {}
for (key, value) in data:
groups.setdefault(key, []).append(value)

#      
from collections import defaultdict
groups = defaultdict(list)
for (key, value) in data:
groups[key].append(value)
10、辞書の導出式
python 2.7の前に、辞書オブジェクトを構築するには、一般的に次のような方法が使われています。読み取り可能性が非常に悪いです。

numbers = [1,2,3]
my_dict = dict([(number,number*2) for number in numbers])
print(my_dict) # {1: 2, 2: 4, 3: 6}
pythonic

numbers = [1, 2, 3]
my_dict = {number: number * 2 for number in numbers}
print(my_dict) # {1: 2, 2: 4, 3: 6}

#          
my_dict = {number: number * 2 for number in numbers if number > 1}
print(my_dict) # {2: 4, 3: 6}
辞書の導出式はpython 2.7の新たな特性であり、可読性は多く増強されています。似ているのか、リストの導出式とセットの導出式です。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。