a = 0
b = 1
value = a or b
print(f"{value=}")
これで出力されるのは value=1
なんですね。
or
で指定されたオブジェクトを順に見ていき、最初の真か、全て偽の場合の最後の値を代入するそうです。
これを利用すれば簡潔にかける場面がありそうです。
例えばデフォルト値の設定です。今までif文で書いていたものを or で代用できそうです。
if user_input:
user_name = user_input
else:
user_name = "ゲスト"
print(f"{user_name=}")
# ------------------------------------------ #
user_name = user_input if user_input else "ゲスト"
print(f"{user_name=}")
↓↓↓
user_name = user_input or "ゲスト" # デフォルトの名前を用意しておきます。
print(f"{user_name=}")
他にも、複数の入力があるが1つだけ有効にしたい場合などにも応用できそうです。
# 入力フォームで、連絡先はどれか1つだけ記入すればよい仕様です
phone = None
email = "user@example.com"
social_id = None
contact = phone or email or social_id
print(f"{contact=}")
そしてand
も似たような使い方ができます。or
とは逆に、最初の偽か、全て真の場合の最後の値を代入するそうです。
a = 1
b = 0
value = a and b
print(f"{value=}")
# 出力: value=0
表題の内容はここまでです。
以下はpythonのマニアックな機能を一部まとめました。
独断と偏見と、私の拙い知識に基づくものですので、ご容赦ください。
... (Ellipsis)
Python には Ellipsis
という組み込みオブジェクトがあり、ドット3つで表示されます。「未設定」の意味合いがあり、None
やFalse
と区別して使うことができます。
value = ...
print(value) # 出力: Ellipsis
print(type(value)) # 出力: <class 'ellipsis'>
print(bool(value)) # 出力: True
pass
と似た使い方ができますが、...
は変数に代入することができます。引数のデフォルト値に指定して、条件分岐することもできます。
def get_value(x=...):
if x is ...:
raise ValueError("xを指定してください")
return x
辞書のキーにタプルを使う
辞書のキーはハッシュ可能なオブジェクトを指定できます。中でも魅力に感じているのがタプルです。これを利用すれば、複数の要素でユニークなバリューを設定できます。データベースの複合キーみたいですね。
# 出発地と到着地のペアで移動時間を管理します
travel_times = {
("東京", "大阪"): 160, # 分
("東京", "名古屋"): 100,
("大阪", "広島"): 90,
}
関数に属性をつける
(class
を使わなくても)関数に属性をつけることができます。
def my_function():
print("Hello!")
my_function.version = 1.0
print(my_function.version) # 出力: 1.0
my_function() # 出力: Hello!
def counter():
counter.count += 1
return counter.count
counter.count = 0
print(counter()) # 出力: 1
print(counter()) # 出力: 2
簡単なメタデータを付属する時などに利用用途があるかもしれません。