我正在学习Python,并且一直在尝试更多地了解Python unittest模块的细节.该文档包括以下内容:
为便于运行测试,我们将在后面看到,这是每个测试模块中提供一个可调用的对象返回预先建立的测试套件是一个好主意:
Run Code Online (Sandbox Code Playgroud)def suite(): suite = unittest.TestSuite() suite.addTest(WidgetTestCase('testDefaultSize')) suite.addTest(WidgetTestCase('testResize')) return suite
据我所知,没有解释这样做的目的.另外,我无法弄清楚如何使用这种方法.我尝试了几件事没有成功(除了了解我得到的错误消息):
import unittest
def average(values):
return sum(values) / len(values)
class MyTestCase(unittest.TestCase):
def testFoo(self):
self.assertEqual(average([10,100]),55)
def testBar(self):
self.assertEqual(average([11]),11)
def testBaz(self):
self.assertEqual(average([20,20]),20)
def suite():
suite = unittest.TestSuite()
suite.addTest(MyTestCase('testFoo'))
suite.addTest(MyTestCase('testBar'))
suite.addTest(MyTestCase('testBaz'))
return suite
if __name__ == '__main__':
# s = MyTestCase.suite()
# TypeError: unbound method suite() must be called
# with MyTestCase instance as first argument
# s = MyTestCase.suite(MyTestCase())
# ValueError: no such test method in <class '__main__.MyTestCase'>: runTest …Run Code Online (Sandbox Code Playgroud) 我一直在搜索各地,包括Stack Overflow档案,以获得如何做到这一点的答案,我尝试自己动手,但是我已经做了简短,所以我决定在这里发布我的请求.
我需要在数组中获取任意(偶数)个项目,并返回与数组中的另一个项目配对的项目.我需要代码的输出与我在下面包含的输出示例相同.
输入:
('A'..'H').to_a
输出:
[[['A','H'], ['B','G'], ['C','F'], ['D','E']], [['A','G'], ['B','F'], ['C','E'], ['D','H']], [['A','F'], ['B','E'], ['C','D'], ['G','H']], [['A','E'], ['B','D'], ['C','H'], ['F','G']], [['A','D'], ['B','C'], ['E','G'], ['F','H']], [['A','C'], ['B','H'], ['D','G'], ['E','F']], [['A','B'], ['C','G'], ['D','F'], ['E','H']]]
有任何想法吗?
这是我到目前为止所做的.它有点脏,并没有按照我需要的顺序返回.
items = ('A'..'H').to_a
combinations = []
1.upto(7) do |index|
curitems = items.dup
combination = []
1.upto(items.size / 2) do |i|
team1 = curitems.delete_at(0)
team2 = curitems.delete_at(curitems.size - index) || curitems.delete_at(curitems.size - 1)
combination << [team1, team2]
end
combinations << combination
end
pp combinations
输出接近,但顺序不正确: …
如果我有一个可能传递文件名或各种文件句柄或typeglobs的函数,那么函数如何区分这些参数 - 包括告诉差异,例如,在*DATA和之间*STDIN?
根据目前为止收到的答案更新了代码谢谢大家.
use strict;
use warnings;
use FileHandle;
sub file_thing_type {
my ($f) = shift;
my $type;
my $r = ref $f;
if ($r eq 'GLOB' or ref(\$f) eq 'GLOB'){
# Regular and built-in file handles.
my $fn = fileno $f;
if (defined $fn){
my %built_in = (
'STDIN' => fileno(*STDIN),
'STDOUT' => fileno(*STDOUT),
'STDERR' => fileno(*STDERR),
'DATA' => fileno(*DATA),
);
for my $k (keys %built_in){
if (defined $built_in{$k} and $built_in{$k} == $fn){ …Run Code Online (Sandbox Code Playgroud) 例子:
%hash = (2010 => 21, 2009=> 9);
$hash = {
a => {
0 => {test => 1},
1 => {test => 2},
2 => {test => 3},
3 => {test => 4},
},
};
Run Code Online (Sandbox Code Playgroud)
如何打印哈希?
考虑这样一个 Python 项目:
foo/
__init__.py
scripts/
run.py
demo.sh
Run Code Online (Sandbox Code Playgroud)
在正常情况下,foo如果您从项目的根目录运行脚本,则尝试从包导入将失败,因为默认的 Python 行为是将调用 Python 解释器的脚本目录
(不一定是当前目录)添加到sys.path. (文档):
python scripts/run.py
Run Code Online (Sandbox Code Playgroud)
然而,我最近注意到这样的导入在我的盒子上工作,我追踪到一些与 PYTHONPATH 相关的令人惊讶的行为。在我的 Bash 配置文件中,我向 PYTHONPATH 添加了一个目录:
export PYTHONPATH="/some/path:$PYTHONPATH"
Run Code Online (Sandbox Code Playgroud)
如果 PYTHONPATH 最初是空的,那么(有点草率,但常见)形式的命令将留下一个尾随冒号:
echo $PYTHONPATH
/some/path:
Run Code Online (Sandbox Code Playgroud)
我一直认为这个尾随标点符号没有影响,但尾随冒号似乎是神秘成功导入的原因。前导或尾随冒号(或甚至一个定义但空PYTHONPATH)将导致sys.path含有一个空字符串之前的site
模块加载,这反过来又导致在当前工作目录被添加到sys.path。
这里有一个 Python 脚本和一个 Bash 脚本来演示。我使用 Python 2.7 和 Python 3.3 得到了相同的行为。
Python脚本run.py::
import sys, os
pp = os.environ.get('PYTHONPATH')
try:
import foo
print 'OK'
assert os.getcwd() in sys.path
assert pp == …Run Code Online (Sandbox Code Playgroud) 当芹菜工人从多个(或许多个)队列中撤离时,是否应该记住实质性的影响?例如,如果我的系统被设计成使工作人员从10到15个队列而不是仅仅1或2,那么是否会有显着的性能损失?作为后续行动,如果其中一些队列有时是空的怎么办?
我正在从破解编码面试的书中解决这个问题:
9.3.数组A [0 ... n-1]中的魔术索引被定义为索引,使得A [i] = i.给定一个不同整数的排序数组,编写一个方法来查找数组A中的魔术索引(如果存在).
这是我的代码:
def magic_index(seq, start = None, end = None):
if start is None:
start = 0
if end is None:
end = len(seq) - 1
if start > end:
return -1
index = (start + end) // 2
if index == seq(index):
print("Equal to index. Value of index = " + index)
return index
if index > seq[index]:
print("Greater than loop. Value of Index =" + index)
return magic_index(seq, start=index + 1, …Run Code Online (Sandbox Code Playgroud) 在这个早期的Stackoverflow问题中,特别是brian d foy的"脚本如何成为一个模块"我已经阅读了如何设置代码,以便它可以作为脚本或模块运行,使用这种技术:
package SomeModule;
__PACKAGE__->run(@ARGV) unless caller();
sub run {
# Do stuff here if you are running the file as
# a script rather than a module.
}
Run Code Online (Sandbox Code Playgroud)
__PACKAGE__这个设置的目的是什么?为什么不这样做呢?
run(@ARGV) unless caller();
Run Code Online (Sandbox Code Playgroud) 我在使用Spreadsheet :: WriteExcel和公式方面遇到了困难VLOOKUP.以下测试脚本使用一些数据填充工作表并尝试创建VLOOKUP公式.当我打开生成的Excel文件时,公式结果显示为#VALUE!.如果我手动编辑任何包含公式的单元格(按F2然后只输入ENTER而不更改任何内容),我可以让Excel正确评估公式.知道出了什么问题吗?
对于它的价值,如果我在OpenOffice中打开相同的文件,公式工作正常.
use strict;
use warnings;
use Spreadsheet::WriteExcel;
my $wb = Spreadsheet::WriteExcel->new('foo.xls');
my $ws = $wb->add_worksheet;
for my $r (0 .. 9){
for my $c (0 .. 4){
$ws->write($r, $c, $r * 10 + $c);
}
$ws->write($r, 10, $r * 10);
my $formula = sprintf('=VLOOKUP(K%s, A1:B10, 2, FALSE)', $r + 1);
$ws->write( $r, 11, $formula );
# $ws->write_formula( $r, 11, $formula ); # Does not help either.
}
Run Code Online (Sandbox Code Playgroud)
版本信息:
在Python中是否有合理的方法来实现类似于Ruby中的mixin行为 - 也就是说,不使用继承?
class Mixin(object):
def b(self): print "b()"
def c(self): print "c()"
class Foo(object):
# Somehow mix in the behavior of the Mixin class,
# so that all of the methods below will run and
# the issubclass() test will be False.
def a(self): print "a()"
f = Foo()
f.a()
f.b()
f.c()
print issubclass(Foo, Mixin)
Run Code Online (Sandbox Code Playgroud)
我有一个模糊的想法,与类装饰师这样做,但我的尝试导致混乱.我对该主题的大多数搜索都指向了使用继承(或者在更复杂的场景中,多重继承)来实现mixin行为.
python ×5
perl ×4
ruby ×2
algorithm ×1
celery ×1
excel ×1
filehandle ×1
hash ×1
import ×1
inheritance ×1
mixins ×1
module ×1
pythonpath ×1
sys.path ×1
typeglob ×1