[python] E731はラムダ式を割り当てていないので、def



Answers

ストーリーは、私が二度使っていた簡単なラムダ関数を持っていました。

a = map(lambda x : x + offset, simple_list)
b = map(lambda x : x + offset, another_simple_list)

これは表現のためのものです、私はこれの異なるバージョンのカップルに直面している。

今、DRYを維持するために、私はこの共通のラムダを再利用し始めます。

f = lambda x : x + offset
a = map(f, simple_list)
b = map(f, another_simple_list)

この時点で、私のコード品質チェッカーはラムダが名前付き関数であることに不満を持ち、関数に変換します。

def f(x):
    return x + offset
a = map(f, simple_list)
b = map(f, another_simple_list)

今、チェッカーは関数が前後に1つの空白行で区切られなければならないと不平を言う。

def f(x):
    return x + offset

a = map(f, simple_list)
b = map(f, another_simple_list)

ここでは、元の2行の代わりに6行のコードがあり、可読性が向上せず、Pythonの増加もありません。 この時点で、コードチェッカーはdocstringを持たない関数について文句を言う。

私の意見では、このルールは、あなたの判断を使用して意味をなすときには避け、壊れたほうが良いです。

Question

私はラムダ式を使うたびにこのpep8警告を得る。 ラムダ式は推奨されていませんか? なぜそうならないのでしょうか?




また、def(ined)関数を使用することさえ不可能な状況に遭遇しました。

class SomeClass(object):
  # pep-8 does not allow this
  f = lambda x: x + 1  # NOQA

  def not_reachable(self, x):
    return x + 1

  @staticmethod
  def also_not_reachable(x):
    return x + 1

  @classmethod
  def also_not_reachable(cls, x):
    return x + 1

  some_mapping = {
      'object1': {'name': "Object 1", 'func': f},
      'object2': {'name': "Object 2", 'func': some_other_func},
  }

この場合、私は実際にクラスに属するマッピングを作成したかったのです。 マッピングの一部のオブジェクトには同じ機能が必要でした。 名前の付いた関数をクラスの外に置くことは非論理的です。 クラス本体の中からメソッド(staticmethod、classmethod、normal)を参照する方法が見つかりませんでした。 SomeClassは、コードの実行時にはまだ存在しません。 クラスからそれを参照することもできません。






Links