Pythonic を中国語に翻訳すると、非常にPython的です。中国では、「とても女の子らしい」、「とても代表的なサッカーチーム」、「とてもCCTV」など、「とても+」という名詞構造が多く使われています。 ·
以下では簡単にするために、Python 的な記述方法を表すために P を使用し、非 Python 的な記述方法を表すために NP を使用します。 もちろん、この P-NP はその P-NP ではありません。
なぜ Python を追求するのですか?
NP と比較して、P の記述方法は簡潔、明確、エレガントです。ほとんどの場合、実行効率が高く、コードが少ないほどエラーが発生しにくくなります。優れたプログラマーはコードを書くときにコードの正確さ、簡潔さ、読みやすさを追求するべきだと思います。これはまさに Python の精神です。
他のプログラミング言語の経験があり、Python を初めて使用するプログラマー (私のような) にとって、Python の記述方法を認識すると、Python コードを記述する際の利便性と効率が向上します。また、この記事の主な読者もまた、このプログラマーのグループになります。
読者の参考のために、P と NP の N 例を以下に示します。
PとNPの例
連鎖比較
P:
a = 3 b = 1 1 <= b <= a < 10 #True
NP:
a = 3 b = 1 b >= 1 and b <= a and a < 10 #True
Pは小学生でも理解できるシンプルでわかりやすい文法州コード~
Truth Test
P:
name = 'Tim' langs = ['AS3', 'Lua', 'C'] info = {'name': 'Tim', 'sex': 'Male', 'age':23 } if name and langs and info: print('All True!') #All True!
NP:
if name != '' and len(langs) > 0 and info != {}: print('All True!') #All True!
つまり、Pの書き方は、判定条件を書かずに、あらゆる対象の真偽を直接判定するというものです。これにより、正確性が保証されるだけでなく、コードの量も削減されます。
真偽値テーブル (false を覚えておくと多くのコードを節約できます!)
真偽
真偽
空でない任意の文字列空の文字列''
0 以外の任意の数値数値1
P の書き方はシンプルで、テスト後の方が効率的です。
回文の検出に使用すると、input == input[::-1] という文になりますが、なんとも優雅ですね。
def reverse_str( s ): return s[::-1]
def reverse_str( s ): t = '' for x in xrange(len(s)-1,-1,-1): t += s[x] return t
strList = ["Python", "is", "good"] res = ' '.join(strList) #Python is good
NP:
res = '' for s in strList: res += s + ' ' #Python is good #最后还有个多余空格
リスト内包表記
P:
numList = [1,2,3,4,5] sum = sum(numList) #sum = 15 maxNum = max(numList) #maxNum = 5 minNum = min(numList) #minNum = 1 from operator import mul prod = reduce(mul, numList, 1) #prod = 120 默认值传1以防空列表报错
sum = 0 maxNum = -float('inf') minNum = float('inf') prod = 1 for num in numList: if num > maxNum: maxNum = num if num < minNum: minNum = num sum += num prod *= num # sum = 15 maxNum = 5 minNum = 1 prod = 120
l = [x*x for x in range(10) if x % 3 == 0] #l = [0, 9, 36, 81]
l = [] for x in range(10): if x % 3 == 0: l.append(x*x) #l = [0, 9, 36, 81]
NP に比べて、P は if...else... の記述が少なく、if...else... が嫌いな人にとっては本当に最初の選択肢です。
dic = {'name':'Tim', 'age':23} dic['workage'] = dic.get('workage',0) + 1 #dic = {'age': 23, 'workage': 1, 'name': 'Tim'}
if 'workage' in dic: dic['workage'] += 1 else: dic['workage'] = 1 #dic = {'age': 23, 'workage': 1, 'name': 'Tim'}
for x in xrange(1,5): if x == 5: print 'find 5' break else: print 'can not find 5!' #can not find 5!
find = False for x in xrange(1,5): if x == 5: find = True print 'find 5' break if not find: print 'can not find 5!' #can not find 5!
b = False if a > 1 else True を使用すると正しく False が返されるため、本物の 3 項記号の置換になります。 Enumerate インデックス添字の開始位置を調整します。デフォルトは 0 です。
a = 3 b = 2 if a > 2 else 1 #b = 2
if a > 2: b = 2 else: b = 1 #b = 2