小编Che*_*evy的帖子

Python单元测试在哪里?

如果您正在编写库或应用程序,那么单元测试文件会在哪里进行?

将测试文件与主应用程序代码分开是很好的,但将它们放入app根目录内的"tests"子目录中是很尴尬的,因为这会导致导入您将要测试的模块变得更加困难.

这里有最好的做法吗?

python unit-testing code-organization

464
推荐指数
12
解决办法
8万
查看次数

SQLAlchemy:flush()和commit()之间有什么区别?

SQLAlchemy flush()commit()SQLAlchemy 之间有什么区别?

我已经阅读了文档,但没有更明智 - 他们似乎假设我没有预先理解.

我对它们对内存使用的影响特别感兴趣.我正在从一系列文件(总共约500万行)中将一些数据加载到数据库中,并且我的会话偶尔会崩溃 - 它是一个大型数据库和一台内存不足的机器.

我想知道我是否使用了太多但commit()没有足够的flush()电话 - 但是如果没有真正了解其中的差异,那就很难说了!

python sqlalchemy

386
推荐指数
7
解决办法
9万
查看次数

如何在Bash中对数组进行切片

查看bash(1)手册页中的"Array"部分,我没有找到切片数组的方法.

所以我想出了这个过于复杂的功能:

#!/bin/bash

# @brief: slice a bash array
# @arg1:  output-name
# @arg2:  input-name
# @args:  seq args
# ----------------------------------------------
function slice() {
   local output=$1
   local input=$2
   shift 2
   local indexes=$(seq $*)

   local -i i
   local tmp=$(for i in $indexes 
                 do echo "$(eval echo \"\${$input[$i]}\")" 
               done)

   local IFS=$'\n'
   eval $output="( \$tmp )"
}
Run Code Online (Sandbox Code Playgroud)

像这样使用:

$ A=( foo bar "a  b c" 42 )
$ slice B A 1 2
$ echo "${B[0]}"  # bar
$ echo "${B[1]}"  # a …
Run Code Online (Sandbox Code Playgroud)

arrays bash slice

171
推荐指数
2
解决办法
10万
查看次数

reStructuredText工具支持

我是reStructuredText的忠实粉丝,但是支持它的工具分散在整个互联网上.在官方的工具列表是不完整的和/或过时的,并且只能通过提交更新特权.有一段时间,维基百科的reStructuredText页面上有一个全面的列表,但这显然" 不符合Web内容的知名度指南 " 并被删除.

所以把它放在一个问题形式中:在使用reStructuredText时,人们期望找到哪些工具支持,例如文本编辑器,Wiki软件,转换器和reStructuredText转换器等等?

restructuredtext

128
推荐指数
1
解决办法
11万
查看次数

从sed/START /,/ END /中排除第一行和最后一行

考虑输入:

=sec1=
some-line
some-other-line

foo
bar=baz

=sec2=
c=baz
Run Code Online (Sandbox Code Playgroud)

如果我只想处理= sec1 =我可以通过以下方式注释掉该部分:

sed -e '/=sec1=/,/=[a-z]*=/s:^:#:' < input
Run Code Online (Sandbox Code Playgroud)

......好吧,差不多.

这将注释包括 "= sec1 ="和"= sec2 ="行的行,结果将类似于:

#=sec1=
#some-line
#some-other-line
#
#foo
#bar=baz
#
#=sec2=
c=baz
Run Code Online (Sandbox Code Playgroud)

我的问题是:在sed中从/ START /,/ END /范围中排除开始和结束行的最简单方法什么

我知道在很多情况下,"s :::"爪子的细化可以在这种特定情况下给出解决方案,但我在这里遵循通用解决方案.

在" Sed - An Introduction and Tutorial "中,Bruce Barnett写道:"我稍后会告诉你如何限制命令,但不包括包含指定模式的行."但是我无法找到他实际显示的位置这个.

在由Eric Pement编写的" 有用的SED单行文章"中,我只能找到包容性的例子:

# print section of file between two regular expressions (inclusive)
sed -n '/Iowa/,/Montana/p'             # case sensitive
Run Code Online (Sandbox Code Playgroud)

unix scripting sed text-manipulation

44
推荐指数
3
解决办法
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万
查看次数

在Rust中,有没有办法迭代枚举的值?

我来自Java背景,我可能有类似的东西enum Direction { NORTH, SOUTH, EAST, WEST},我可以使用增强的for循环依次对每个值做一些事情,如:

for(Direction dir : Direction.values())  {
    //do something with dir
}
Run Code Online (Sandbox Code Playgroud)

我想用Rust枚举做类似的事情.

iteration enums rust

40
推荐指数
5
解决办法
2万
查看次数

bash:$ [<arithmetic-expression>]与$((<arithmetic-expression>))

我刚刚偶然发现了bash语法:

foo=42
bar=$[foo+1] # evaluates an arithmetic expression
Run Code Online (Sandbox Code Playgroud)

当我用Google搜索时,我找到了 http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html#sect_03_04_05:

3.4.6.算术扩展

算术扩展允许评估算术表达式和结果的替换.算术扩展的格式是:

$(( EXPRESSION )) 
Run Code Online (Sandbox Code Playgroud)

...

只要有可能,Bash用户应尝试使用方括号的语法:

$[ EXPRESSION ] 
Run Code Online (Sandbox Code Playgroud)

但是,这只会计算EXPRESSION的结果,并且不进行测试......

在我的bash手册页中,我只能找到如下$(( EXPRESSION ))形式:

foo=42
bar=$((foo+1)) # evaluates an arithmetic expression
Run Code Online (Sandbox Code Playgroud)

那么什么测试不是用$[...]那个做的$((...)),或者$[...]只是遗留版本$((...))

legacy syntax bash arithmetic-expressions operators

29
推荐指数
2
解决办法
6257
查看次数

为什么`additionalProperties`是在Swagger/OpenAPI 2.0中表示Dictionary/Map的方法

虽然我已经看到了OpenAPI规范中的示例:

type: object
additionalProperties:
  $ref: '#/definitions/ComplexModel'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么使用additionalPropertiesMap是地图/字典的正确模式.

这个规范唯一具体的内容additionalProperties也是没有用的:

以下属性取自JSON Schema定义,但其定义已调整为Swagger规范.它们的定义与JSON Schema中的定义相同,只有在原始定义引用JSON模式定义的情况下,才使用模式对象定义.

  • 项目
  • 所有的
  • 性能
  • additionalProperties

mapping hash dictionary swagger openapi

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

Makefile分析

所以我有这个基于Makefile的构建系统,我的用户觉得它运行得太慢了.为了这个问题,我们将性能定义为确定实际应该做什么所花费的时间.

我可以看到一些优化途径 -

  • 减少Makefile被解析的次数,并且由于包含Makefile片段而重新计算DAG.
  • 减少使用的外部Makefile的数量 make -C
  • 减少变量扩展
  • 等等

- 但我想先知道我的瓶颈在哪里.由于没有分析的优化是浪费生命,我想问:如何分析Makefile?

假设我继承的系统设计得相当好,即它已经实现了最常见的交易技巧:(主要是)非递归make,ccache,预编译头,自动生成的头依赖等).

......而且只是为了抢占一些可能的答案.我知道可能会有更快更好的构建系统然后GNU制作 - (就个人而言,我迫不及待地想看看CMake的人会对Ninja系统提出什么) - 但遗憾的是,交换构建系统并不在卡片中.

optimization profiling makefile gnu-make

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