小编ast*_*rog的帖子

编写可重用(参数化)unittest.TestCase方法

可能重复:
如何在python中生成动态(参数化)单元测试?

我正在使用unittest包编写测试,我想避免重复代码.我将进行一些测试,这些测试都需要一个非常类似的方法,但每次只有一个值不同.一个简单而无用的例子是:

class ExampleTestCase(unittest.TestCase):

    def test_1(self):
        self.assertEqual(self.somevalue, 1)

    def test_2(self):
        self.assertEqual(self.somevalue, 2)

    def test_3(self):
        self.assertEqual(self.somevalue, 3)

    def test_4(self):
        self.assertEqual(self.somevalue, 4)
Run Code Online (Sandbox Code Playgroud)

有没有办法编写上面的例子,而不是每次都重复所有的代码,而是编写一个通用的方法,例如

    def test_n(self, n):
        self.assertEqual(self.somevalue, n)
Run Code Online (Sandbox Code Playgroud)

告诉unittest用不同的输入尝试这个测试?

python unit-testing testcase parameterized-unit-test

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

Sphinx文档中的条件输出

我正在为Sphinx编写一些文档,我想打印出一些仅用于HTML文档的文本块,而不是用于LaTeX文档.有些东西告诉我,我应该能够做到这一点,sphinx.ext.ifconfig但我无法弄清楚如何.有谁知道如何做到这一点?

python documentation python-sphinx

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

Sans-serif数学与matplotlib中的乳胶

以下脚本:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as mpl

mpl.rc('font', family='sans-serif')
mpl.rc('text', usetex=True)

fig = mpl.figure()
ax = fig.add_subplot(1,1,1)
ax.text(0.2,0.5,r"Math font: $451^\circ$")
ax.text(0.2,0.7,r"Normal font (except for degree symbol): 451$^\circ$")

fig.savefig('test.png')
Run Code Online (Sandbox Code Playgroud)

尝试在matplotlib中使用带有LaTeX的sans-serif字体.问题是数学字体仍然是衬线字体(由轴编号表示,并由中心的标签所示).有没有办法将数学字体设置为sans-serif?

python latex matplotlib

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

将极地重新投影到笛卡尔网格

我有一个极性(r,theta)网格(这意味着每个单元格是一个环形区域)包含一些物理量(例如温度)的值,我想重新网格化(或重新投影或重新采样)这些值到笛卡尔网格上.有没有可以做到这一点的Python包?

我对将细胞中心的坐标从极地转换为笛卡尔并不感兴趣 - 这很容易.相反,我正在寻找一个可以实际重新网格化数据的包.

谢谢你的任何建议!

python image

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

文件描述符错误

如果我尝试执行以下代码

f = file('test','rb')
fout = file('test.out','wb')

for i in range(10):
    a = f.read(1)
    fout.write(a)

f.close()
f = fout
f.seek(4)

print f.read(4)
Run Code Online (Sandbox Code Playgroud)

'test'任何文件在哪里,我得到:

Traceback (most recent call last):
  File "testbad.py", line 12, in <module>
    print f.read(4)
IOError: [Errno 9] Bad file descriptor
Run Code Online (Sandbox Code Playgroud)

但是,如果我只更改fout行以使用临时文件:

import tempfile

f = file('test','rb')
fout = tempfile.NamedTemporaryFile()

for i in range(10):
    a = f.read(1)
    fout.write(a)

f.close()
f = fout
f.seek(4)

print f.read(4)
Run Code Online (Sandbox Code Playgroud)

没有错误.有人知道为什么吗?我原本预计第一个案例会起作用,但我必须做错事.

在此先感谢您的帮助!

python file

17
推荐指数
1
解决办法
6万
查看次数

文件对象的绝对路径

这已经在StackOverflow上讨论了 - 我试图找到一个很好的方法来找到文件对象的绝对路径,但我需要它是健壮的os.chdir(),所以不能使用

f = file('test')
os.path.abspath(f.name)
Run Code Online (Sandbox Code Playgroud)

相反,我想知道以下是否是一个很好的解决方案 - 基本上扩展文件类,以便在打开时,保存文件的绝对路径:

class File(file):

    def __init__(self, filename, *args, **kwargs):
        self.abspath = os.path.abspath(filename)
        file.__init__(self, filename, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

然后就可以做到

f = File('test','rb')
os.chdir('some_directory')
f.abspath # absolute path can be accessed like this
Run Code Online (Sandbox Code Playgroud)

这样做有风险吗?

python filesystems file

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

高性能C++多维数组

我正在寻找有关C++的高性能多维数组库/类的建议.我真正需要的是:

  • 能够动态分配具有在运行时确定的大小的数组

  • 访问和修改单个数组值的能力(快速)

  • 能够使用简单的数组算法,如 array1 = array2 + 2 * array3

  • 一个维护良好的图书馆

我遇到过各种图书馆,包括:

  • Blitz ++,它看起来正是我所需要的,但似乎没有得到很好的维护(最新的稳定版本是5年前)

  • Boost,它不支持数组算术,并且与Blitz ++相比似乎相当慢.

  • Jonn Bowman的 array.h没有文档.

有没有人对上述选项有任何其他建议或意见?

c++ multidimensional-array

13
推荐指数
2
解决办法
9068
查看次数

在Cython中检查nan

我正在寻找一种方法来检查Cython代码中的NaN值.目前,我正在使用:

if value != value:
    # value is NaN
else:
    # value is not NaN
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?是否可以使用像Numpy这样的功能isnan?

python cython

13
推荐指数
2
解决办法
2658
查看次数

挂钩添加命令到distutils构建?

我在setup.py脚本中添加了自定义distutils命令:

from distutils.command.build_py import build_py

cmdclass = {}
cmdclass['build_qt'] = BuildQt
cmdclass['build_py'] = build_py

setup(..., cmdclass=cmdclass, ...)
Run Code Online (Sandbox Code Playgroud)

有没有办法让它在运行时::

python setup.py build
Run Code Online (Sandbox Code Playgroud)

这第一次打电话

python setup.py build_qt
Run Code Online (Sandbox Code Playgroud)

自动?

python distutils

12
推荐指数
2
解决办法
3712
查看次数

将呼叫签名复制到装饰者

如果我做以下事情

def mydecorator(f):
    def wrapper(*args, **kwargs):
        f(*args, **kwargs)
    wrapper.__doc__ = f.__doc__
    wrapper.__name__ = f.__name__
    return wrapper

@mydecorator
def myfunction(a,b,c):
    '''My docstring'''
    pass
Run Code Online (Sandbox Code Playgroud)

然后键入help myfunction,我得到:

Help on function myfunction in module __main__:

myfunction(*args, **kwargs)
    My docstring
Run Code Online (Sandbox Code Playgroud)

因此,名称和文档字符串被正确复制.在这种情况下,有没有办法复制实际的呼叫签名(a, b, c)?

python decorator

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