将数据放入代码时使用技巧来保存程序员是否可以接受?

时间:2009-07-13 23:34:04

标签: python coding-style

示例:在python中键入字符串列表真的很烦人:

["January", "February", "March", "April", ...]

我经常做这样的事情来节省我必须在整个地方键入引号:

"January February March April May June July August ...".split()

那些花了相同的时间,我输入了2个月的数量。另一个例子:

[('a', '9'), ('4', '3'), ('z', 'x')...]

而不是:

map(tuple, "a9 43 zx".split())

花了更少的时间。

13 个答案:

答案 0 :(得分:33)

代码通常被多次读取,并且只写一次 以牺牲可读性为代价节省写作时间通常不是一个好的选择,除非你正在做一些丢弃的代码。

第二个版本不太明确,您需要一些时间来理解代码正在做什么。我们只是谈论变量实例化,而不是算法!

答案 1 :(得分:19)

一个好的文本编辑器可以使这些事情成为一个问题。例如,我可以在我的代码中键入以下行:

print `"January February March April May June July August September October November December".split()`

然后使用键序列V:!python<ENTER>我可以通过python解释器运行该行,输出如下:

['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']

我正在使用Vim作为我的例子,但我确信这对于Emacs,TextMate等同样容易。

答案 2 :(得分:6)

在一个相当聪明的编辑器中你可以:

  1. 选择感兴趣的行
  2. 为前一个插入替换(<space><space>”,
  3. 选中所选行复选框,
  4. 点击全部替换,
  5. bam ..你完成了。
  6. 可读易于输入...尊重编辑的力量!

答案 3 :(得分:5)

总的来说,我认为这是一个坏主意。第一个例子并不糟糕(它可以替代python缺乏qw),但第二个例子更难以理解。特别是,我认为这种事情非常单一,但在编写Python代码时无论如何都不合适。代码可读性比节省编写代码的时间要重要得多。如果您真的需要很多数据来进行硬编码,请编写一个脚本来为您生成。

答案 4 :(得分:3)

您多久需要输入["January", "February"... etc]

当然,您的方法可能会节省您的时间,但为什么除了您有点懒惰之外没有任何理由增加代码的复杂性?

如果你真的必须经常输入它......复制粘贴!

答案 5 :(得分:3)

在生产代码中,以正确的方式执行。在测试代​​码中,只要这个成语出现超过一次或两次,我认为这是可以接受的。如果在测试代码中,这种情况出现一次或两次,请以正确的方式进行。

答案 6 :(得分:1)

  

...我经常做这样的事情来节省我必须在所有地方输入引号......

我认为这样的事情每个节目只应该做一次。如果你做同样的“到处都是”那么你使用哪一个并不重要,你就是在创造一个怪物。

此声明应仅针对所有代码编写。

答案 7 :(得分:1)

对于您不希望发生变化的数据,例如几周或几周的数据,这是合理的。在模拟或删除与文件或数据库的交互时执行此操作也是合理的,因为它会隔离您的代码以进行测试。但是,这对于生产代码来说不是一个好的长期解决方案,也不会真正为您节省大量时间。任何大到足以节省大量时间的东西都足以要求在其他地方存储数据,比如数据库中的单独文件。

答案 8 :(得分:1)

我只是发誓Steve McConnell's Code Complete:其中一个核心见解是糟糕的程序员编写代码以让计算机做某事,期间,而优秀的程序员首先编写代码来编写人们可以理解的代码第二,让计算机做事。

(编写代码时,如果没有可读性作为一个主要问题,就像试图在衣柜或文件柜中找到东西,人们只是在没有任何想法的情况下填写东西,你可以导航并找到东西。)

我认为你可以通过阅读 Code Complete 获得很多收益;我知道我做了。

答案 9 :(得分:1)

你的快速而聪明的方法,不错,花更多的时间来阅读哪些不好。可读性始终是第一位的。

答案 10 :(得分:0)

我不认为那类事物应该在源头。

如果我是你,我会让Python评估相应的第二个版本,然后将结果粘贴到我的源代码中。

答案 11 :(得分:0)

我认为把声明放在

之类

“1月2月3月4月5月6月7月8月......”。split()

模块全局级别的

没问题。这样它只在导入期间执行一次。我甚至有时会在非性能关键功能中使用它,因为降低了线路噪音。

在旁注中我认为Python解释器可以在编译时执行“split()”,这将消除方法调用开销。原因是字符串是内置文字而Python不允许在基本字符串类型上添加/覆盖方法,因此编译器可以知道“.split()只能引用一个特定方法。

答案 12 :(得分:-2)

如果有点懒,我会觉得这是可以接受的,只要正在做的事情对性能不太重要。如果您需要更快的速度,您可以随时返回并优化它。