小编Jam*_*oks的帖子

在Python中,我应该如何测试变量是None,True还是False

我有一个函数可以返回三件事之一:

  • 成功(True)
  • 失败(False)
  • 错误读取/解析流(None)

我的问题是,如果我不应该反对,True或者我应该False如何看待结果.以下是我目前的做法:

result = simulate(open("myfile"))
if result == None:
    print "error parsing stream"
elif result == True: # shouldn't do this
    print "result pass"
else:
    print "result fail"
Run Code Online (Sandbox Code Playgroud)

它是否真的像删除== True部分一样简单,或者我应该添加一个tri-bool数据类型.我不希望simulate函数抛出异常,因为我希望外部程序执行错误是记录并继续.

python

129
推荐指数
4
解决办法
39万
查看次数

我应该如何测试遗传算法

我做了很少的遗传算法; 他们工作(他们很快找到合理的解决方案).但我现在发现了TDD.有没有办法以TDD方式编写遗传算法(严重依赖于随机数)?

为了更一般地提出问题,如何测试非确定性方法/函数.这是我想到的:

  1. 使用特定的种子.如果我首先在代码中犯了一个错误,但在重构时有助于发现错误,那将无济于事.

  2. 使用已知的数字列表.与上面类似,但我可以手动遵循代码(这将非常繁琐).

  3. 使用常数.至少我知道会发生什么.当RandomFloat(0,1)总是返回1时,确保骰子总是读取6是很好的.

  4. 尝试尽可能多地从GA中移出非确定性代码.这看起来很愚蠢,因为这是它的目的的核心.

关于测试的非常好的书籍的链接也将受到赞赏.

language-agnostic unit-testing non-deterministic genetic-algorithm

53
推荐指数
1
解决办法
4833
查看次数

在python中每n个项拆分一个生成器/ iterable(splitEvery)

我正在尝试用Python编写Haskel函数'splitEvery'.这是它的定义:

splitEvery :: Int -> [e] -> [[e]]
    @'splitEvery' n@ splits a list into length-n pieces.  The last
    piece will be shorter if @n@ does not evenly divide the length of
    the list.
Run Code Online (Sandbox Code Playgroud)

这个的基本版本工作正常,但我想要一个适用于生成器表达式,列表和迭代器的版本.并且,如果有一个发电机作为输入,它应该返回一个发电机作为输出!

测试

# should not enter infinite loop with generators or lists
splitEvery(itertools.count(), 10)
splitEvery(range(1000), 10)

# last piece must be shorter if n does not evenly divide
assert splitEvery(5, range(9)) == [[0, 1, 2, 3, 4], [5, 6, 7, 8]]

# should give same …
Run Code Online (Sandbox Code Playgroud)

python iterator split

31
推荐指数
5
解决办法
1万
查看次数

如何组合两个单独的Git存储库?

我克隆了一个git repo,里面有我的emacs配置文件.我想在一个子目录中添加pylookup.这样做的正确方法是什么?

以下是我能想到的选项.


  1. 如果我将其克隆到~/.emacs.d/pylookup/并将该文件夹添加到我的emacs仓库中,那么当我这样做时,它会正确更新:

    cd ~/.emacs.d/pylookup/
    git pull
    cd ~/.emacs.d
    git commit -a -m "updates to pylookup"
    git push
    
    Run Code Online (Sandbox Code Playgroud)

    即,当我在其他机器上提取这些更改时,我会有新版本的pylookup吗?

  2. pylookup/*每当pylookup更新时,我是否只是让我的emacs repo忽略并在每台机器上更新它.如果有一些repo和几台机器,这会很烦人,但我可以忍受它.

  3. 是否有一些聪明的技巧git submodule.如果是这样,你能提供解释我真的不懂文档.我如何为emacs和pylookup提取更改.

  4. 我是否使用答案2,但制作一个脚本来更新所有子回购.如果我这样做,每次pylookup改变时我都可以在每台机器上运行一次.


几个可能的相关职位.

git

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