我在 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)
whcihr
基本上返回该行等于
yield r
. 为什么他不能写那条简单的线而不是身份。
像这样的事情还有很多,我无法理解。
是否有任何书可以解释以这种方式编写程序。我不喜欢一章一章地从数据类型开始的书,最后我仍然看不到像我们在 github 上那样的单个程序。