🚀
If文(条件分岐)なしで処理を自動で切り替えるPythonライブラリを開発
初めてPythonにてライブラリを開発し、3日前にベータ版としてリリースしました!
なんと、すでにPyPIでのインストール数が200近くに到達しています🎉
この記事では簡単にライブラリの紹介をします。
ライブラリ概要
正式名称: triggon
インストール方法:
pip install triggon
このライブラリは、あらかじめ設定したラベルに対して
対応する処理(値の変更・早期リターン・関数実行)を、条件分岐なしで自動切り替えできます。
対応してる処理:
- リテラル値や変数の値の自動変更
- 早期リターンの実行
- 任意の関数の自動実行
サンプルコード紹介
簡単な使い方を3つのサンプルコードで紹介します。
➀単一の値の自動切り替え
特定の関数を通った場合のみ挨拶切り替えたい場合
from triggon import Triggon
tg = Triggon("msg", "おやすみなさい") # 変更後のテキストを、ラベルと一緒に設定
def switch_msg():
tg.set_trigger("msg") # 'msg'にトリガーポイントを設定
greet()
def greet():
x = tg.alter_literal("msg", org="おはようございます") # 元の値にラベルを設定します
print(x)
greet()
switch_msg()
# 1回目の出力結果
おはようございます
# 2回目の出力結果
おやすみなさい
➁複数のラベルや値を変更
クラスの初期設定では、1つのラベルに複数の値を設定できます。
この場合、それぞれの値はインデックスで区別され、関数内ではキーワード引数でインデックスを指定して使用します。
また、1つのインデックスに複数の値を割り当てることも可能です。
(READMEから抜粋)
import random
from triggon import Triggon
# それぞれのラベルにインデック0, 1の値を設定
tg = Triggon({
"level_1": ["ノーマル", 80],
"level_2": ["レア", 100],
"level_3": ["伝説の", 150],
})
level = None
attack = None
def spin_gacha():
items = ["level_1", "level_2", "level_3"]
result = random.choice(items)
tg.set_trigger(result) # result(ラベル)のトリガーポイントを設定
tg.alter_var(result, level) # インデックス0
tg.alter_var(result, attack, index=1) # インデックス1
print(f"{level}ソードを取得しました!")
print(f"攻撃力: {attack}")
spin_gacha()
#出力結果(resultが'level_2'だった場合)
レアソードを取得しました!
攻撃力: 100
インデックス数が小さい場合は、代わりに*をインデックスの数だけラベルの先頭につけることでインデックスを区別できます。辞書型で渡す場合もキーワード引数が使えないので、代わりに*を使います。
➂早期リターン + 関数呼び出し
最後に早期リターンと任意の関数を実行するサンプルコードを紹介します。
from triggon import Triggon, TrigFunc
# 早期リターンでは設定した値も一緒に返せます
# 関数実行では、その関数の戻り値が返るので設定値はNoneで固定
tg = Triggon({
"skip": "早期リターン終了!",
"call": None,
})
F = TrigFunc() # 関数に使うためのインスタンス変数を作成
def example():
print("“call”フラグが有効なら、example_2() にジャンプします。")
tg.trigger_func("call", F.example_2()) # トリガーポイント通るとexample_2()を実行
return "通常終了!"
def example_2():
print("example_2() に到達!")
tg.trigger_return("skip")
# トリガーポイント通らない場合は、example()だけでもok
result = tg.exit_point("skip", F.example())
print(result)
tg.set_trigger(["skip", "call"]) # 早期リターンと関数呼び出しのフラグを有効にする
result = tg.exit_point("skip", F.example())
print(result)
# 出力1回目
“call”フラグが有効なら、example_2() にジャンプします。
通常終了!
# 出力2回目
“call”フラグが有効なら、example_2() にジャンプします。
example_2() に到達!
早期リターン終了!
以上、3つのサンプルコードを紹介しました!
一時的な切り替えや、複雑な分岐の際にとても便利です。
現在ベータ版のため、バグの修正や機能のアップデートを定期的に行っています。
GitHubにてソースコードも公開しているので興味がある方は見てみてください!
不具合報告や改善提案も歓迎してます!
↓ READMEに書かれている各関数の説明やサンプルコードはリンクから飛べます
README(日本語版)
🔗 GitHub: tsuruko12/triggon
🔗 X: @12tsuruko
Discussion