我正在做一个项目,在这个项目中,我的代码分散在不同的文件中;例如,在convex.py中,我通过调用顶部的from rings import *来调用我用rings.py编写的方法。在rings中,我使用mpmath定义了一个常量p,它用于rings的各种函数中,因此它取决于我手写到rings中的精度(例如,通过mpmath.mp.dps = 40)。但是,在使用convex时,我以后可能希望p具有更高的精度。当我将rings导入到convex中时,是否有一种方法可以使它接受一些输入?也许我想要一次50位十进制的精度,下一次使用100位,所以一个完美的解决方案是让rings接收一个输入D并在那里设置mpmath.mp.dps = D,而在convex中可能有
D = 50
from rings[D] import *(然后在文件的其他地方使用D,在那里我也可以自由地更改D (以及任何我想在convex中更改的东西,而不需要每次回到rings中)。(上面建议的表示法是将rings作为D的函数进行排序。)
我看到的唯一具体解决办法是修改我的每个rings方法,将输入作为我在rings中定义的所有与精度相关的常量,在convex中重新定义它们,然后将它们作为参数传递;但这似乎是一个笨重的整体糟糕的解决方案。
如果我能澄清这件事,请告诉我。提前谢谢。
编辑:示例代码
# rings.py
import mpmath as mp
from mpmath import sqrt
mp.mp.dps = 40
p = sqrt(2)
def f(x):
return p*x# convex.py
import mpmath as mp
from mpmath import sqrt
from rings import *
D = 50 # or 100
mp.mp.dps = D
q = sqrt(3)
print D+f(q)发布于 2021-06-04 20:21:56
在我看来,最简单的解决方案是声明一个类,它允许更新值D。
rings.py
import mpmath as mp
from mpmath import sqrt
class Ring:
def __init__(self, D=40):
mp.mp.dps = D
def set_d(self, D):
mp.mp.dps = D
def f(self, x):
p = sqrt(2)
return p * xconvex.py
import mpmath as mp
from mpmath import sqrt
from rings import Ring
D = 50
ring = Ring(D)
q = sqrt(3)
print(D + ring.f(q))我希望我正确理解了你的问题。如果这有帮助的话请告诉我。
https://stackoverflow.com/questions/67842246
复制相似问题