示例:在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())
花了更少的时间。
答案 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)
在一个相当聪明的编辑器中你可以:
<space>
“<space>
”,可读和易于输入...尊重编辑的力量!
答案 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)
如果有点懒,我会觉得这是可以接受的,只要正在做的事情对性能不太重要。如果您需要更快的速度,您可以随时返回并优化它。