返回介绍

16.5. 数据中心思想编程

发布于 2019-09-14 13:30:54 字数 1369 浏览 780 评论 0 收藏 0

16.5. 数据中心思想编程

现在的你,可能正抓耳挠腮地狠想,为什么这样比使用 for 循环和直接调用函数好。这是一个非常好的问题。通常这是一个程序观问题。 使用 map 和 filter 强迫你围绕数据进行思考。

就此而言,你从没有数据开始,你所做的第一件事是 获得当前脚本的目录路径,并获得该目录中的文件列表。 这就是关键的一步,使你有了被处理的真实数据:文件名列表。

当然,你知道你并不关心所有的文件,而只关心测试套件。你有 太多数据, 因此你需要 filter 数据。 你如何知道哪些数据应该保留? 你需要一个测试来确定,因此你定义一个测试并把它传给 filter 函数。 这里你应用了一个正则表达式来确定,但无论如何构建测试,原则是一样的。

现在你有了每个测试套件的文件名(且局限于测试套件,因为所有其他内容都被过滤掉了),但是你确实还需要以模块名来替代之。 你有正确数量的数据,只是 格式不正确。 因此,你定义了一个函数来将文件名转换为模块名,并把这个函数关联到整个列表。 从一个文件名,你可以获得一个模块名,从一个文件名列表,你可以获得一个模块名列表。

如果不应用 filter, 你也可以使用 for 循环结合一个 if 语句的方法。 map 的使用则可以由一个 for 循环和一个函数调用来取代。 但是 for 循环看起来像是个繁重的工作。至少,简单讲是在浪费时间,糟糕的话还会隐埋错误(Bug)。 比方说,你需要弄清楚如何测试这样一个条件“这个文件是测试套件吗?” 不管怎么说,这是应用细化逻辑,没有哪个语言可以让我们这样做。 但是一旦你搞清楚了,你还需要费尽周折的定义一个新的空列表、写一个 for 循环以及一个 if 语句并手工地调用 append 将符合条件的元素一个个添加到新列表中,然后一路注意区分那个变量里放着过滤后的数据,那个变量里放着未过滤得老数据吗? 为什么不直接定义测试条件,然后由 Python 为你完成接下来的工作呢?

当然啦,你可以尝试眩一点的做法,去删除列表中的元素而不新建一个列表。 但是你以前吃过这样的亏。 试图在循环中改变数据结构是很容易出问题的。 Python 是一个这样工作的语言吗? 用多长时间你才能搞清这一点? 你能确定记得你第二次这样尝试的安全性? 程序员在和这类纯技术课题较劲的过程中,花费了太多的时间、犯了太多的错误,却并没有什么意义。这样并不可能令你的程序有所进步,只不过是费力不讨好。

我在第一次学习 Python 时是抵触列表遍历的, 而且我抗拒 filter 和 map 的时间更长。 我坚持着我更艰难的生活,固守着类似于 for 循环和 if 语句以及一步步地代码编程方式。 而且我的 Python 程序看起来很像是 Visual Basic 程序,细化每一个函数中的每一个操作步骤。 它们却有着同样的小错误和隐蔽的 Bug。 这一切其实都没有意义。

让这一切都远去吧。 费力不讨好的编程不重要,数据重要。 并且数据并不难,他们不过就是数据。 如果多了,就过滤。 如果不是我们要的,就关联。 聚焦在数据上,摒弃费力的劳作。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文