小编Nil*_*rth的帖子

Python - 创建具有初始容量的列表

像这样的代码经常发生:

l = []
while foo:
    #baz
    l.append(bar)
    #qux
Run Code Online (Sandbox Code Playgroud)

如果您要将数千个元素追加到列表中,这非常慢,因为必须不断调整列表大小以适应新元素.

在Java中,您可以创建具有初始容量的ArrayList.如果您对列表的大小有所了解,那么效率会更高.

我知道像这样的代码通常可以重新考虑到列表理解中.但是,如果for/while循环非常复杂,那么这是不可行的.我们的Python程序员有没有相同的东西?

python dictionary initialization list

182
推荐指数
7
解决办法
16万
查看次数

考虑切换到程序员Dvorak布局

我已经编程了很长一段时间,我被告知"程序员Dvorak"键盘布局.听取人们对此的看法会有助于我决定是否应该进行转换.

我感兴趣的主要事项是:

  1. 我能打得更快吗?
  2. 它可以在多个操作系统上运行吗?

dvorak

66
推荐指数
8
解决办法
2万
查看次数

说一个类型是"盒装"是什么意思?

我听说在某些语言中被称为"盒装"的类型.

在Java中,我听说过"autoboxing".这是什么?它是否有类型的包装类?如果我使用盒装或非盒装类型,我的代码会如何变化?

java autoboxing types type-systems terminology

44
推荐指数
4
解决办法
2万
查看次数

Bash和测试驱动开发

在bash中编写多个简单的脚本时,我常常想知道如何使代码可测试.

通常很难为bash代码编写测试,因为它在获取值并返回值的函数上很少,而在检查和设置环境中的某些方面的函数中很高,修改文件系统,调用程序等 - 依赖于环境或具有副作用的功能.因此,设置和测试代码变得比它们测试的代码复杂得多.


例如,考虑一个简单的测试函数:

function add_to_file() {
  local f=$1
  cat >> $f
  sort -u $f -o $f
}
Run Code Online (Sandbox Code Playgroud)

此功能的测试代码可能包括:

add_to_file.before:

foo
bar
baz
Run Code Online (Sandbox Code Playgroud)

add_to_file.after:

bar
baz
foo
qux
Run Code Online (Sandbox Code Playgroud)

和测试代码:

function test_add_to_file() {
   cp add_to_file.{before,tmp}
   add_to_file add_to_file.tmp
   cmp add_to_file.{tmp,after} && echo pass || echo fail
   rm add_to_file.tmp
}
Run Code Online (Sandbox Code Playgroud)

这里有5行代码由6行测试代码和7行数据测试.


现在考虑一个稍微复杂的案例:

function distribute() {
   local file=$1 ; shift
   local hosts=( "$@" )
   for host in "${hosts[@]}" ; do
     rsync -ae ssh $file $host:$file
   done
}
Run Code Online (Sandbox Code Playgroud)

我甚至不能说如何开始为此测试...


那么,有一个很好的方法在bash脚本中做TDD,还是我应该放弃并把我的努力放在别的地方?

bash tdd

40
推荐指数
4
解决办法
1万
查看次数

Java:构造Locale对象时由NullPointerException引起的ExceptionInInitializerError

我正在为我和其他几个人写的程序进行本地化.现在大多数字符串都是从ini文件中以适当的语言加载的.我试图用程序中的货币格式做同样的事情.但是,一旦我尝试启动应用程序,我就会收到运行时异常.

我正在使用Locale对象作为一些NumberFormat.getCurrencyInstance()的参数,如下所示:

private static final NumberFormat decf;
static 
{
    decf = NumberFormat.getCurrencyInstance(Lang.cLocale);
    decf.setRoundingMode(RoundingMode.HALF_UP);
}
Run Code Online (Sandbox Code Playgroud)

Lang是包含所有本地化内容的类.IDE在尝试运行时抱怨的代码是public static Locale cLocale = new Locale(GUI.DB_info[19],GUI.DB_info[20]);

GUI是包含GUI的类,我们决定构建DB_info数组(它本身只包含从另一个类的远程数据库加载的信息).DB_info [19]是语言代码(现在是),DB_info [20]是国家代码(US).数组元素正在被填充 - 或者说,我现在无法进入该程序; 但填充DB_info的代码没有任何改变.

完整的例外情况如下:

Exception in thread "main" java.lang.ExceptionInInitializerError
at greetingCard.GUI.<clinit>(GUI.java:118)
Caused by: java.lang.NullPointerException
at java.util.Locale.<init>(Unknown Source)
at java.util.Locale.<init>(Unknown Source)
at greetingCard.Lang.<clinit>(Lang.java:13)
... 1 more
Run Code Online (Sandbox Code Playgroud)

引用的GUI中的行是:static String welcome = Lang.L_WELCOME + ", " + empName;,而Lang.java基本上是这样的:

// Set locale for currency display
public static Locale cLocale = new Locale(GUI.DB_info[19],GUI.DB_info[20]); // language, country

// Employee …
Run Code Online (Sandbox Code Playgroud)

java locale object nullpointerexception static-initializer

2
推荐指数
1
解决办法
3549
查看次数