Python学習【365日チャレンジ!】300日目のマスターU(@Udemy11)です。
次の目標を300日に設定した181日目から119日が経過して、ようやく300日の目標を達成しました!
私の記憶が確かなら、こんなに長い間、一つのことを継続できたのは【寝ることとご飯を食べること】くらいしか思いつきません。
ほんと、自分で自分を褒めてあげたいです。
とはいえ、当初の目標である365日には、あと65日残っているので、気持ちを引き締めて継続していこうと思います。
それでは今日も、Python学習を始めましょう。
昨日の復習
昨日は、Enum
を使ってサーバーの状態に応じた処理をする方法を学習しました。
Enum
で設定し列挙型定数の使いどころとしては、サーバーの状態を取得してデータベースに保存した値を活用して、サーバーを操作するなどの使い方がありました。
データーベースに状態を取得する操作やシャットダウンの操作は、擬似的なコードで代用しましたが、実際の使用には代用した部分に具体的なコードが必要でした。
Enum
を使った基本的なサーバーの操作については、昨日の記事をごらんください。
今日は、Enum
より便利な使い方のできるintEnum
を学習します。
IntEnum
Enum
を使ったサーバーの操作では、列挙型定数の整数部分を取得するために、任意のクラスオブジェクトSatus()
の引数にデータベースのvalue
を得るコードを入れる必要がありましたが、IntEnum
を使うことですっきりしたコードにすることができます。
import enum
db = {'server1': 1,'server2': 2}
class Status(enum.IntEnum):
ACTIVE = 1
INACTIVE = 2
RUNNING = 3
if db['server1'] == Status.ACTIVE:
print('shutdown')
elif db['server1'] == Status.INACTIVE:
print('terminate')
昨日のコードと比べると、10行目のdb['server1']
が、昨日はStatus(db['server1'])
になっていました。
出力結果は昨日と同じくserver1
の値が1
なので、shutdown
が出力されます。
出力結果
shutdown
2つを比較
ちょっとした違いですが、同じ結果が得られるEnum
とIntEnum
ですが、その違いは整数を保持しているかどうかです。
コードを必要なものだけにして、Enum
とIntEnum
の値やタイプを出力してみます。
import enum
db = {'server1': 1}
class Status(enum.Enum):
ACTIVE = 1
class Status_Int(enum.IntEnum):
ACTIVE = 1
print(Status.ACTIVE)
print(Status_Int.ACTIVE)
print(type(Status.ACTIVE))
print(type(Status_Int.ACTIVE))
print(Status.ACTIVE == 1)
print(Status_Int.ACTIVE == 1)
出力結果
Status.ACTIVE
Status_Int.ACTIVE
<enum 'Status'>
<enum 'Status_Int'>
False
True
11行目と12行目の出力は、それぞれの列挙型定数を出力していて、13行目と14行目はEnum
のクラスオブジェクト名を持ったタイプを出力しています。
15行目と16行目は、取得する整数の値との比較をしているので、15行目はFalse
になり、16行目はTrue
という出力結果になっています。
出力するオブジェクト名もタイプも同じだけど、IntEnum
は整数の値(value
)を取得しているのでTrue
が返され、Enum
は整数の値(value
)を取得するのではなくname
を取得しているのでFalse
が返されています。
まとめ
Enum
とIntEnum
の違いは、name
を返すか整数のvalue
を返すかの違いですが、IntEnum
は整数を返すので、コードがシンプルになってわかりやすくなります。
最近、Googleは、ホームページで使用している画層の解像度も評価の一つにしているようなので、画像サイズはそれなりに大きくなりますが、より軽いサイズにして表示速度を早くする必要もあります。
同じように、記述するコードをよりシンプルにすると同時に、文字列よりサイズを抑えられる整数を使って少しでも処理速度を上げることが利用者の利便性に繋がります。
ほんの数秒の違いが利用者の増減に関わってくるので、コードもIntEnum
などを活用して少しでもサイズを小さくするように心がけましょう。
それでは、明日もGood Python!