2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python:辞書型のget()メソッド第2引数(default)は常に評価される

Last updated at Posted at 2024-10-10

何を言っているかわからないタイトルになってしまっていますので説明します。

辞書型のget()メソッド

>>> data = {'lastname': 'suzuki'}
>>> print(data.get('lastname', 'nanashi'))
suzuki
>>> print(data.get('firstname', 'nanashi'))
nanashi

上記のように、辞書型(dict)の get() メソッドを使うと存在するキーであればその値、存在しなければ第2引数のデフォルト値を返却する動作が記述できます。
(第2引数を省略した場合は None が返ります。)
KeyErrorが発生せず横着できるので好んで使っています。

第2引数の評価タイミング

この第2引数、どうやら常に評価されているようです。
第1引数のキーが存在した場合、第2引数部分の評価が不要であることは明らかで、処理しないだろうと勝手に思い込んでいたのですが、そうではないようだ、ということが本ポストの内容です。

確認

確認してみます。

>>> def default_name():
...     print('default works!!')
...     return 'nanashi'
...
>>> data = {'lastname': 'suzuki'}
>>> print(data.get('lastname', default_name()))
default works!!
suzuki

data.get()lastname キーの値は取得できていますが、第2引数の default_name() 関数が動作していることがわかります。

多くの場合は問題にならないと思いますが、第2引数に関数を記述する場合はちょっと気にしたほうが良さそうです。

リンク

https://docs.python.org/3.12/library/stdtypes.html#dict.get

2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?