Python開発時に注意すべき10のこと

巴扎黑
リリース: 2017-04-29 17:05:24
オリジナル
1560 人が閲覧しました

ここでは、Python に関する 10 の役立つヒントとテクニックを紹介します。これらのいくつかは、初心者が言語を学習する際に犯しやすい間違いです。

注: 私たちは皆 Python 3 を使用していると仮定します

1. リスト内包表記

リストがあります: バッグ = [1, 2, 3, 4, 5]

ここで、すべての要素を次のように 2 倍にします: [2, 4, 6, 8, 10]

ほとんどの初心者は、おそらくこれまでの言語経験に基づいてこれを行うでしょう

bag = [1, 2, 3, 4, 5]  
for i in range(len(bag)):  
    bag[i] = bag[i] * 2
ログイン後にコピー

しかし、もっと良い方法があります:

bag = [elem * 2 for elem in bag]
ログイン後にコピー

とてもシンプルですよね?これは Python リスト内包表記と呼ばれます。

Trey Hunner のチュートリアルをクリックして、リスト内包表記の詳細を参照してください。

2. リストをざっと確認します

上のリストを続けてください。

可能であればこれを避けてください:

bag = [1, 2, 3, 4, 5]  
for i in range(len(bag)):  
    print(bag[i])
ログイン後にコピー

代わりに、次のようにする必要があります:

bag = [1, 2, 3, 4, 5]  
for i in bag:  
    print(i)
ログイン後にコピー

x がリストの場合、その要素を反復処理できます。ほとんどの場合、各要素のインデックスは必要ありませんが、必要な場合は enumerate 関数を使用します。以下のようになります:

bag = [1, 2, 3, 4, 5]  
for index, element in enumerate(bag):  
    print(index, element)
ログイン後にコピー

非常に直感的で明確です。

3.エレメント交換

Java または C 言語から Python に切り替える場合は、次のことに慣れているかもしれません:

a = 5  
b = 10

# 交换 a 和 b
tmp = a  
a = b  
b = tmp
ログイン後にコピー

しかし、Python はより自然で優れた方法を提供します。

りー

十分ですよね?

4. 初期化リスト

10 個の整数 0 のリストが必要な場合は、まず次のことを考えます:

a = 5  
b = 10  
# 交换a 和 b
a, b = b, a
ログイン後にコピー

別の方法を試してみましょう:

bag = []  
for _ in range(10):  
    bag.append(0)
ログイン後にコピー

ほら、なんてエレガントなんだろう。

注: リストにリストが含まれている場合、これを実行すると浅いコピーが生成されます。

例:

bag = [0] * 10
ログイン後にコピー

おっとっと!すべてのリストが変更されますが、最初のリストのみを変更したいと考えています。

変更します:

bag_of_bags = [[0]] * 5 # [[0], [0], [0], [0], [0]]  
bag_of_bags[0][0] = 1 # [[1], [1], [1], [1], [1]]
ログイン後にコピー

また覚えておいてください:

「時期尚早な最適化が諸悪の根源」
リストの初期化が必要かどうか自問してください。

5. 文字列を構築します

多くの場合、文字列を出力する必要があります。変数が多い場合は、次のことは避けてください:

bag_of_bags = [[0] for _ in range(5)]  
# [[0], [0], [0], [0], [0]]

bag_of_bags[0][0] = 1  
# [[1], [0], [0], [0], [0]]
ログイン後にコピー

うーん、これはどのくらい乱雑に見えますか?代わりに、優れた簡潔なメソッド .format を使用できます。

これを実行します:

rree

ずっといい!

6. タプルを返す

Python では関数内で複数の要素を返すことができるため、作業が簡単になります。ただし、タプルを解凍するときに、一般的なエラーが発生します:

name = "Raymond"  
age = 22  
born_in = "Oakland, CA"  
string = "Hello my name is " + name + "and I'm " + str(age) + " years old. I was born in " + born_in + "."  
print(string)
ログイン後にコピー

これは必須ではありません。次のように変更できます:

name = "Raymond"  
age = 22  
born_in = "Oakland, CA"  
string = "Hello my name is {0} and I'm {1} years old. I was born in {2}.".format(name, age, born_in) 
print(string)
ログイン後にコピー

すべての要素を返す必要がある場合は、アンダースコア_を使用してください:

def binary():  
    return 0, 1

result = binary()  
zero = result[0]  
one = result[1]
ログイン後にコピー

とても効率的です!

7. 辞書にアクセスする

また、キーとペア (キー、値) を辞書に書き込むこともよくあります。

dict に存在しないキーにアクセスしようとすると、KeyError を回避するために次のようにしたくなるかもしれません:

def binary():  
    return 0, 1

zero, one = binary()
ログイン後にコピー

ただし、get() を使用する方が良い方法です。

りー

もちろん、代わりに setdefault を使用することもできます。

これはより簡単ですが、より高価な方法です:

zero, _ = binary()
ログイン後にコピー

dict 導出も使用できます。

りー

これら 2 つのメソッドは、count が呼び出されるたびにリストを走査するため、コストがかかります。

8 図書館を利用する

既存のライブラリをインポートするだけで、本当にやりたいことが実現します。

前の例について引き続き話しますが、リスト内に数値が出現する回数をカウントする関数を構築しましょう。まあ、そのようなことができるライブラリはすでにあります。

りー

ライブラリを使用する理由:

  • コードは正しく、テスト済みです。


  • アルゴリズムが最適化されているため、より高速に実行できる可能性があります。


  • 抽象化: 明確で十分に文書化されているため、まだ実装されていないことに集中できます。


  • 最後に、すべてが揃ったので、車輪を再発明する必要はありません。

9. リストをスライス/ステップ実行します

この list[start:stop:step] のように、開始点と終了点を指定できます。リストの最初の 5 つの要素を取り出します:

countr = {}  
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]  
for i in bag:  
    if i in countr:
        countr[i] += 1
    else:
        countr[i] = 1

for i in range(10):  
    if i in countr:
        print("Count of {}: {}".format(i, countr[i]))
    else:
        print("Count of {}: {}".format(i, 0))
ログイン後にコピー

これはスライスです。停止点を 5 に指定すると、停止する前にリストから 5 つの要素が取り出されます。

最後の 5 つの要素をどうするか?

りー

分かりませんか? -5 は、リストの末尾から 5 つの要素を取得することを意味します。

リスト内の要素間の間隔を操作したい場合は、次のようにします:

countr = {}  
bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]  
for i in bag:  
    countr[i] = countr.get(i, 0) + 1

for i in range(10):  
    print("Count of {}: {}".format(i, countr.get(i, 0)))
ログイン後にコピー

しかし、次のようにする必要があります:

bag = [2, 3, 1, 2, 5, 6, 7, 9, 2, 7]  
countr = dict([(num, bag.count(num)) for num in bag])

for i in range(10):  
    print("Count of {}: {}".format(i, countr.get(i, 0)))
ログイン後にコピー

これはリスト内のステップです。 list[::2] は、リストを走査し、2 つのステップで要素を取り出すことを意味します。

list[::-1] を使用すると、クールな反転リストを実行できます。

10. Tab キーまたはスペースバー

長期的には、タブとスペースを混在させると大惨事が発生する可能性があり、IndentationError: 予期しないインデントが表示されることになります。 Tab キーを選択するかスペース バーを選択するかに関係なく、ファイルとプロジェクト全体でそれを使用し続ける必要があります。

タブの代わりにスペースを使用する理由の 1 つは、タブがすべてのエディタで同じように作成されるわけではないことです。使用するエディタによっては、タブが 2 ~ 8 個のスペースとして扱われる場合があります。

コードを記述するときにスペースを使用してタブを定義することもできます。このようにして、タブとして使用するスペースの数を選択できます。ほとんどの Python ユーザーは 4 つのスペースを使用します。

英語原文: The Python Way: 10 Tips

以上がPython開発時に注意すべき10のことの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート