
Python 3はしばらく前から存在しており、かなりの数の開発者、特にPythonを始めたばかりの開発者は、すでにこのバージョンの言語を使用しています。新機能の多くは広く使用されていますが、いくつか残されているようです。この記事では、あまり知られていないが便利な3つの機能について説明します。私は他の言語からそれらについて知っています、そしてそれらはPython3をクールにします。
この記事は、誰もが使用すべきPython3の3つの無視された機能の翻訳です。
列挙
私はJavaとSwiftでenumをよく使用しました。私は今もPythonでそれらを使い続けています。
Pythonで列挙を宣言するのは非常に簡単で、バージョン3より前では可能でした(制限はありますが)。
from enum import Enum
class State(Enum):
AIR = 0
LAND = 1
SEA = 2
myState = State.AIR
# 0
print(myState.value)
# AIR
print(myState.name)
上記のコードでは、から継承するクラスを宣言することにより、列挙が導入されてい
Enumます。そして、必要なすべての状態を簡単に説明します。私の場合:AIR、、LANDおよびSEA。
Python 3で追加された機能は、
.valueとを使用する機能.nameです。それらを使用すると、列挙に対応する番号と文字列を取得できます。
たとえば、出力
State.LAND.nameされる値はLAND。
列挙型は、定数のテキスト識別子が必要な場合にコードで役立ちます。たとえば、代わりに0又は1で状態を比較し、それははるかに現出と比較することである
State.MOVINGまたはState.STATIONARY。定数は変更される可能性があり、誰かが後でコードを見ると、MOVING0よりもはるかに理解が深まります。その結果、コードの読みやすさが大幅に向上します。
詳細については、Enumの公式Python3ドキュメントを参照してください。
書式設定
バージョン3.6で追加された
fstrings、強力なテキストフォーマットツールです。それらは、はるかに読みやすく、エラーのないコードを可能にします(Javaから切り替えた後に楽しんでいます)。これは、format以前Pythonで使用されていたものよりも優れています。使用例はformat次のとおりです。
name = ''
blog_title = 'codeatcpp.com'
# , codeatcpp.com.
a = ", {} {}.".format(name, blog_title)
文字列内およびリストの後に、変数の名前が特定の順序で示されている空の中括弧に気付くのは簡単です。
同じコードを見てみましょうが、それを使用する
fstringと読みやすくなり、Swiftのフォーマット方法と非常によく似ています。
name = ''
blog_title = 'codeatcpp.com'
# , codeatcpp.com.
a = f", {name} {blog_title}."
このようなきちんとした文字列を取得するに
fは、引用符の前に文字を置くだけで、空の括弧の代わりに、変数またはデータの名前を文字列にすぐに書き込むことができます。変数は1行に直接書き込まれるため、要素の数を数えたり、変数が最後に配置された順序に従う必要はありません。それらは、それらの値が必要とされる場所にちょうどいいです。
これを使用
fstringすると、従来のアプローチを使用するよりも読みやすく、コードの保守が容易になります。
データクラス
データクラスは前のトピックよりも紛らわしいトピックになる可能性があるため、もう少し説明が必要になります。データクラスは私がKotlinで本当に気に入ったものなので、Pythonでも使用するのが大好きです。
データクラスは、データを保存することを唯一の目的とするクラスです。このクラスには、読み取りと書き込みが可能な変数が含まれていますが、追加のロジックはありません。
異なるクラス間で文字列と数値の配列を渡す必要があるプログラムがあると想像してください。のようなメソッドを持つことができますが
pass(str, arr)、クラスの唯一のメンバーとして文字列と配列を含むクラスを作成する方がはるかに便利です。
データクラスを使用すると、何をしようとしているのかがわかりやすくなり、ユニットテストの作成も簡単になります。
以下の例は、3Dベクトルである単純なデータクラスを示していますが、さまざまなデータの任意の組み合わせを表すように簡単に拡張できます。
from dataclasses import dataclass
#
@dataclass
class Vector3D:
x: int
y: int
z: int
#
u = Vector3D(1,1,-1)
# : Vector3D(x=1, y=1, z=-1)
print(u)
ここで、データクラスの定義が通常のクラスの定義と非常に似ていることは簡単にわかりますが、デコレータが使用され
@dataclass、各フィールドがとして定義されている点が異なり: ます。
作成されたものの機能は
Vector3D非常に制限されていますが、データクラスを使用するポイントは、効率を高め、コード内のエラーの数を減らすことです。Vector3D型変数のセットよりも、パラメーターとして渡す方がはるかに優れていますint。
デコレータの詳細については、Python3
@dataclassの公式ドキュメントを参照してください。
結論
これらの可能性がどのように気に入っているかコメントで教えてください。それらを使用するための新しいシナリオについて聞くのは興味深いでしょう。ハッピーコーディング!