JavaScriptを有効にしてください

PythonのR1721(不要な内包表記)を抑制する

 ·   2 min read

はじめに

PythonでPylintを使用したときに表示されるリファクタリングメッセージR1721(不要な内包表記)を抑制する方法を解説します。

Pythonの内包表記は処理が高速なためよく使用しますが、冗長になる場合があります。静的解析ツールPylintを使用すると、R1721として表示されます。Rはコードをリファクタリングすべきことを意味します。

この記事で検証したバージョンは以下の通りです。

  • OS: Windows 10 Home
  • Python 3.11.6
  • Pylint 3.0.2

辞書 (dict) 内包表記と集合 (set) 内包表記を例に示します。

辞書内包表記のR1721

以下のような辞書内包表記で、辞書を作るスクリプトを例に示します。

1
2
3
4
array = ["a", "b", "c"]

d = {i:v for i,v in enumerate(array)}
# d = {0: 'a', 1: 'b', 2: 'c'}

これをPylintで解析すると、以下の結果になります。

R1721: Unnecessary use of a comprehension, use dict(enumerate(array)) instead. (unnecessary-comprehension)

内包表記ではなく、組込み関数のdict()を使用せよと表示されます。辞書のキーを処理せずにそのまま使用する場合、R1721が出力されます。リファクタリング後のコードは以下になります。

1
2
3
array = ["a", "b", "c"]

d = dict(enumerate(array))

集合内包表記のR1721

以下のような集合内包表記で、集合を作るスクリプトを例に示します。

1
2
3
4
array2 = ["a", "a", "b", "c", "c"]

s = {a for a in array2}
# s = {'a', 'b', 'c'}

これをPylintで解析すると、以下の結果になります。

R1721: Unnecessary use of a comprehension, use set(array2) instead. (unnecessary-comprehension)

内包表記ではなく、組込み関数のset()を使用せよと表示されます。要素を処理せずにそのまま使用する場合、R1721が出力されます。リファクタリング後のコードは以下になります。

1
2
3
array2 = ["a", "a", "b", "c", "c"]

s = set(array2)
シェアする

Helve
WRITTEN BY
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

サイト内検索