Python組み込み関数2 -abs編-
Pythonおさらい第2弾
制約として公式ドキュメントのみ参照*1として、読む癖をつける訓練も兼ねる。
今回はabs関数
について。
前回結構頑張ったので今回は緩く済ませられそうな関数をチョイス。
いわゆる絶対値を返す関数としてしか認識していないが実態はいかに……。
読み込むドキュメントはこちら
構成
abs関数
の詳細はこんな感じ。
abs(x)
ドキュメントによると、数値の絶対値を返すとのこと。
int
, float
, complex
に加えて__abs__()
を実装しているオブジェクトに対応するそう。
以上!
認識が一切覆ることなく、でしょうねという感想しか出てこない。
使ってみる
int型
の-10
,0
,10
に対し使用float型
の-10.1
,-0.1
,0.0
,0.1
,10.01
に対し使用
実行するコードは以下の通り。
def show_abs(text, list_): print(text) print('-' * 30) for i in list_: print(f'abs({i}): {abs(i)}') int_list = [-10, 0, 10] float_list = [-10.1, -0.1, 0.0, 0.1, 10.01] show_abs('int型', int_list) print() show_abs('float型', float_list)
int型 ------------------------------ abs(-10): 10 abs(0): 0 abs(10): 10 float型 ------------------------------ abs(-10.1): 10.1 abs(-0.1): 0.1 abs(0.0): 0.0 abs(0.1): 0.1 abs(10.01): 10.01
当然な結果。
自作クラス
さすがにあんまりなので自作クラスに__abs__()
を定義して使ってみることにする。
complex
は複素数型らしいが、学がないのでそもそも複素数が何かわからんです。
実行するコードとその出力は以下の通り。
class Person: def __init__(self, name: str, age: int): self.name = name self.age = age def __int__(self) -> int: return self.age def __str__(self) -> str: me = f'{self.name}({self.age})' return me def __abs__(self) -> int: return id(self) me = Person('Otsuhachi', 28) print(me, int(me), abs(me), sep='\n')
Otsuhachi(28) 28 2523203087376
abs(me)
で返るのは今回実行時のme
のIDなので、プログラム終了までは一定で、実行毎に変動する値になる。
無事、絶対値を取得できる自作クラスを作成できた。
締め
今回は特別学ぶことはなかった印象。
__abs__()
を実装すれば自作クラスでも動くとはいえ、現状ではあまり用途が思いつかない。
組み込み関数コンプリートのために書いた感が拭えない結果となった。
これからもif x < 0: x *= -1
を省略するためにしか使わなそう。
*1:わかりやすく解説している他サイトを見ない