可能重复:
如何在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用不同的输入尝试这个测试?
我正在为Sphinx编写一些文档,我想打印出一些仅用于HTML文档的文本块,而不是用于LaTeX文档.有些东西告诉我,我应该能够做到这一点,sphinx.ext.ifconfig但我无法弄清楚如何.有谁知道如何做到这一点?
以下脚本:
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?
我有一个极性(r,theta)网格(这意味着每个单元格是一个环形区域)包含一些物理量(例如温度)的值,我想重新网格化(或重新投影或重新采样)这些值到笛卡尔网格上.有没有可以做到这一点的Python包?
我对将细胞中心的坐标从极地转换为笛卡尔并不感兴趣 - 这很容易.相反,我正在寻找一个可以实际重新网格化数据的包.
谢谢你的任何建议!
如果我尝试执行以下代码
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)
没有错误.有人知道为什么吗?我原本预计第一个案例会起作用,但我必须做错事.
在此先感谢您的帮助!
这已经在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)
这样做有风险吗?
我正在寻找一种方法来检查Cython代码中的NaN值.目前,我正在使用:
if value != value:
# value is NaN
else:
# value is not NaN
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?是否可以使用像Numpy这样的功能isnan?
我在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)
自动?
如果我做以下事情
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 ×9
file ×2
c++ ×1
cython ×1
decorator ×1
distutils ×1
filesystems ×1
image ×1
latex ×1
matplotlib ×1
testcase ×1
unit-testing ×1