考虑以下三行Mathematica代码并注意输入行1和3完全相同(这是我发现的用于演示此行为的最小代码段).
>> Integrate[Exp[-a^2] Sin[2 p] ((a^2 + b^2) + b*Cos[p] + a*Sin[p]), {p, 0, 2 \[Pi]}]
0
>> $Assumptions = {t > 0};
>> Integrate[Exp[-a^2] Sin[2 p] ((a^2 + b^2) + b*Cos[p] + a*Sin[p]), {p, 0, 2 \[Pi]}]
8/3 Sqrt[a^2+b^2] E^-a^2
Run Code Online (Sandbox Code Playgroud)
请注意,积分应该产生0,就像在Mathematica的第一个答案中一样.我输入的假设显然与集成无关.这是一个错误(我使用Mathematica 8.0)?
更奇怪的是,如果我将积分分成2或3个积分的总和,则每个积分都会产生0.如果我从积分中取出不依赖于p的部分,那就相同了.
对我来说它看起来像一个bug,但如果有什么我想念的,请告诉我.
请考虑以下示例代码
class A:
def __init__(self, i):
self.i = i
print("Initializing object {}".format(self.i))
def __del__(self):
print("Deleting object {}".format(self.i))
for i in [1, 2]:
a = A(i)
Run Code Online (Sandbox Code Playgroud)
在循环中创建对象旨在确保在创建新的A对象之前调用A的析构函数.但显然会发生以下情况:
初始化对象1
初始化对象2
删除对象1
删除对象2
为什么对象1的析构函数只在新对象初始化后才被调用?这是预期的行为吗?我知道for循环在python中没有自己的作用域.例如,在C++中,肯定会在对象2的构造函数之前调用1的析构函数(至少如果在循环中声明了对象).
在我的程序中,我想确保在创建新对象之前删除旧对象.除了a在for循环结束时显式删除之外还有其他可能吗?
提前致谢.