意外と知らないpython Tips

pythonはバージョンアップの度魅力的な機能が追加されていますが、知らなくても問題なくコードが書けますし、割と問題なく読めたりします。なので新しい機能は積極的に調べないとなかなか気付けません。そこで、python中級者以上でも意外と知らなそうな便利なTipsを紹介します。

フォーマット済み文字列リテラル(v3.6で追加)

文字列リテラルに変数を埋め込む機能です。文字列リテラルにプレフィックスfを付けて、変数を{}でくくるだけです。

>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'

%記法でも同じようなことはできるんですけども、こっちの方が簡単だし、直感的で間違いも起こりにくそうです。

入れ子にもできます。

>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}"  # nested fields
'result:      12.35'

v3.8では、以下の書き方も追加されています。

>>> user = 'eric_idle'
>>> member_since = date(1975, 7, 31)
>>> f'{user=} {member_since=}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"

これで、ちょっとしたスクリプトで変数確認するときに楽に書けます。

数値リテラル内のアンダースコア(v3.6で追加)

数字リテラルのアンダーバー(_)は無視されるという機能です。無視されるので機能面で何かメリットがあるわけではないのですが、桁数が多い定数とか何桁あるのか分かりづらい数を扱うときに、3桁区切りに_を入れるとコードが見やすくなります。16進数でも使えます。

>>> 1_000_000_000_000_000
1000000000000000
>>> 0x_FF_FF_FF_FF
4294967295

型ヒント(v3.5で追加)

変数の型や関数の戻り値の型を明示できます。こちらも先ほどと同様プログラムの挙動が変わる機能ではないのですが、ソースコードを読んだりデバッグしたりするときに大いに助けになります。それだけでなく、上手に使えば、pycharmとかvscodeとかでコーディングするときにも変数の型を頼りにした補完機能がより強力になったり、コードに矛盾が生じているときにすぐ教えてもらえるので作業がはかどります。

def greeting(name: str) -> str:
   return 'Hello ' + name

v3.6からは変数のアノテーションも追加されています。

from typing import List, ClassVar, Dict

primes: List[int] = []

captain: str  # Note: no initial value!

class Starship:
   stats: ClassVar[Dict[str, int]] = {}

flush keyword argument to print (v3.3で追加)

スクリプト実行時に、リダイレクトで標準出力をファイルに保存するようにすると、ある程度出力バッファがたまらないとファイルに保存してくれませんが、printコマンドにflush=Trueオプションを付けると、printの度にflushしてくれるのですぐ出力ファイルが確認できます。

また、一部のIDEでは改行をprintするまでコンソールに出力がされないのですが、flush=Trueでprintの度にコンソールに情報を表示させることができます。

print('hello', end='', flush=True)

行列の乗算専用の中置演算子 (v3.5で追加)

行列は誰でも使っているわけではないですけれど、行列計算を多く扱う人にとっては乗算を表す@演算子はかなり恩恵があります。例えば、

S = dot((dot(H, beta) - r).T,
       dot(inv(dot(dot(H, V), H.T)), dot(H, beta) - r))

を以下のようにすっきりかけます。

S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)

文字のタイプの量が減るだけでなく、式を追うのが容易になって変な間違いを減らすことができるでしょう。


この記事が気に入ったらサポートをしてみませんか?