-1

githubの大企業によるオープンソースプロジェクトで、彼らは可能な限り小さなステップで簡単なプログラムを実行しているのを見てきました。

高度なメソッドを使用してコード行を最小限に抑えようとします。これにより、単純な関数呼び出しでさえ複雑に見えます。

どうすればこれらのことを理解できますか。それは高度な概念ではなく、効率的な方法で単純なことを行うことであり、それがコードを理解しにくくします。

例として、これはscrapyのcrawlerSpiderのコードです。

def identity(x):
    return x

class Rule(object):

    def __init__(self, link_extractor, callback=None, cb_kwargs=None, follow=None, process_links=None, process_request=identity):
        self.link_extractor = link_extractor
        self.callback = callback
        self.cb_kwargs = cb_kwargs or {}
        self.process_links = process_links
        self.process_request = process_request
        if follow is None:
            self.follow = False if callback else True
        else:
            self.follow = follow

これは彼らがルールを使用した場所です

rules = ()
for link in links:
                r = Request(url=link.url, callback=self._response_downloaded)
                r.meta.update(rule=n, link_text=link.text)
                yield rule.process_request(r)

今、私はidentity functionそこで何もしていないの使用が何であるかを理解することができません

process_request = identityつまり、

rule.process_request(r) = identity(r) whcihはr、基本的に次のようになります。

yield r。なぜ彼はアイデンティティの代わりにその単純な行を書くことができないのですか。

このように理解できないことがたくさんあります。

そのようにプログラムを書くことを説明している本はありますか?データ型で始まる本が章ごとに進むのは好きではありません。最終的には、githubにあるようなプログラムが1つも表示されません。

4

1 に答える 1

3

恒等関数は一種の技術であり、本当に必要のないときに変換を期待するプロセスにデータを配置することができます。

たとえば、配列と別の関数が配列にマッピングされることを期待する関数があり、マッピングが必要ない場合(ただし、関数が行う他のすべての関数)、恒等関数を渡します。

このパターンは、高階抽象化を適切にサポートする言語、特に関数型言語で非常に一般的です。Pythonに限定されません。

于 2012-12-17T22:24:46.827 に答える