2019/04/20

[python3]文字列の%dみたいなやつは{}になった

最近、テストコードをpython3で書いている。
python3だ、とわざわざ言わないと、以前のようにpython2の期限が近づいていることを忘れてしまうかもしれない。
なるべく「python3」と明記するようにしよう。


それはともかく、私がやっていることはそんなに難しいことではない。
JSON-RPCのインターフェースがあって、python3のAPIが準備されているので、それを呼び出すだけだ。


私の近況はともかく、APIを実行したら、何か結果を出したい。
そして今回は、単に標準出力に出せば良い。
となると、print()だ。
python2であれば制御命令みたいな使い方をされていたが、python3では関数っぽい使い方になった。
まあ、C言語を使っている身としては、そちらの方が自然な気がする。


で、今のところ結果を出力するのに、

print('result=' + val)

だったり、

print(('result: val1=' + val1 + ', ' val2=' + str(val2))

みたいな書き方をしている。

問題は無いのだが・・・リプレースメントというか、C言語のprintf()で言うところの%dや%sみたいな代替文字を使って出力手段があったことは覚えている。

今が、それを使うときだ!


https://docs.python.org/ja/3.6/library/string.html#format-string-syntax
print()特有というよりは、文字列操作の一環なのだろう。
str.format()というのがそれっぽい気がするのだが・・・複雑すぎやしないかい?


あまり難しく考えなければ、arg_nameに数字を使って、波括弧の中にarg_nameを書いて、その順番に並べればいいんじゃなかろうか。

01: hello = 'hello'
02: world = 'world'
03: 
04: print('{0} {1}'.format(hello, world))

hello world

おお、動いた。


これはこれでいいとして、python2のときは%とか使ってた気がする。
あれは、python3では使わなくなったのだろうか?

https://docs.python.org/ja/3/library/string.html#format-examples

「従来の%-書式」とか「古い%-書式」とか書いてあるので、python3だけ覚えておきたいなら気にしなくてよいんだろう。


昔は、このリプレースメントみたいな引数の順番を出力側のフォーマットで入れ替えできる意味が分かってなかったのだけど、多言語化でどうしても語順が入れ替わる場合なんかに有用なのだということに気付いてから、真面目に理解すべきだと考えるようになった。

まあ、いつもログ出力とか、ちょっとした計算結果とかでしか使わないから、+で文字列をつなぐだけのことが多いのだけどね。。。

2 件のコメント:

  1. python3.6くらいから、また別の書き方ができるようになっててですね…

    返信削除
    返信
    1. そ、そんなバナナ・・・

      削除

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。