Quantxでのprintデバッグを便利にしてみる
こんにちは、イナズマです。今日はQuantxのアルゴリズム…ではなく、アルゴリズムを作成する際のデバッグを便利にするtipsを紹介していきたいと思います。
初心者の方でもわかるよう、プログラムも軽く解説したいと思います。
Quantxでのデバッグについて
Quantxではprint関数が使えません。代わりにctx.logger.debug()
という関数が提供されています。この関数は引数をログに出力してくれます。この画像の下部の「ログ」という部分に出力されています。
だいたいprint関数と同じですね。
ctx.logger.debugの不便なところ
個人的にこの関数にいくつか不便なところを感じたので改善を試みよう、というのが今回の記事です。
関数名が長い
ctx.logger.debug
って長くないですか?printだとたった5文字です!!ということでprints
という関数を定義してしまいましょう。(print
という名前でも動くのですが、組み込み関数の方のprint
とかぶってしまうため一応prints
という名前で定義します)
# prints関数をhandle_signals内で利用する場合はhandle_signals内で定義する。
def handle_signals(ctx, date, current):
def prints(arg):
ctx.logger.debug(arg)
# 下に処理が続く
# 使い方
prints(変数名)
こうすればprints
でログに出力できるようになります。引数は当然、文字列でも数値でも辞書でもなんでも大丈夫です!!
handle_signals内でprints
関数を使う分にはこれで問題ないのですが、initialize
関数内で利用する場合はinitialize
関数内でも定義する必要があります。
任意の数の引数を渡したい!!
組み込み関数であるprint
は、複数の引数を与えた場合、空白で区切って表示してくれます。
例
print(1, 'abc', -3.5)
出力
1 abc -3.5
ctx.logger.debug
でも複数の引数を与えたらすべて表示してほしいですよね!ということで任意の数の引数(可変長引数)を受け取れるようにしてみます。定義する場所は、先程と同じところです。
定義
# *を使うと可変長引数を受け取れる。引数はtuple型。
def prints(*args):
for i in args:
ctx.logger.debug(i)
使い方
prints(1, 'abc', -4.3) # 任意の個数の引数を与える
まんまprint
関数と同じですね。
出力
(handle_signals
関数は日ごとに何度も呼び出されるため何度も出力されます。)
余談
余談ですがctx.logger.debug
に複数の引数を与えてもなにも出力されません。(されないはずです…)エラーもでません。
なので、ctx.logger.debug(*args)
のような記述ではうまくいかないはずです。
なにか知ってる人いましたら教えてください。
変数ごとに改行が入るのは嫌だ!!
さて、現状のprints
関数では複数の引数を渡した場合、それぞれが改行されて出力されてしまいます。(上の出力の画像参照)
改行区切りではなく、空白区切りで出力したい方は次のようにprints
関数を書き換えてみましょう!!
def prints(*args):
# tupleのすべての要素にstr()を適用し、文字列型にする。
str_args = map(str, args)
# 文字列型が要素のオブジェクトの要素すべてを空白区切りで連結する。
s = ' '.join(str_args)
ctx.logger.debug(s)
出力
def prints(*args):
ctx.logger.debug(' '.join(map(str, args)))
やってることは変わってません。最終的には、こんな感じの自作prints関数を僕は使っています。有用に感じたらぜひ使ってみてください!!(ちなみにですが、この関数のデメリットとしてコードが数行長くなることと、日毎に関数を定義し直されるので処理が多少重くなるかも知れないです>_<)
それではまた。
Author And Source
この問題について(Quantxでのprintデバッグを便利にしてみる), 我々は、より多くの情報をここで見つけました https://qiita.com/Inazuma110/items/22cfaf918fb6d05edc29著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .