小编sha*_*.dp的帖子

你能解释一下这个Mathematica $ Assumptions行为吗?

考虑以下三行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,但如果有什么我想念的,请告诉我.

wolfram-mathematica

10
推荐指数
1
解决办法
372
查看次数

在对象的第二次初始化时,为什么在__del__之前调用__init__?

请考虑以下示例代码

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循环结束时显式删除之外还有其他可能吗?

提前致谢.

python oop

8
推荐指数
2
解决办法
229
查看次数

标签 统计

oop ×1

python ×1

wolfram-mathematica ×1