首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入时传递输入?

输入时传递输入?
EN

Stack Overflow用户
提问于 2021-06-04 18:20:04
回答 1查看 44关注 0票数 0

我正在做一个项目,在这个项目中,我的代码分散在不同的文件中;例如,在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中可能有

代码语言:javascript
复制
D = 50
from rings[D] import *

(然后在文件的其他地方使用D,在那里我也可以自由地更改D (以及任何我想在convex中更改的东西,而不需要每次回到rings中)。(上面建议的表示法是将rings作为D的函数进行排序。)

我看到的唯一具体解决办法是修改我的每个rings方法,将输入作为我在rings中定义的所有与精度相关的常量,在convex中重新定义它们,然后将它们作为参数传递;但这似乎是一个笨重的整体糟糕的解决方案。

如果我能澄清这件事,请告诉我。提前谢谢。

编辑:示例代码

代码语言:javascript
复制
# rings.py
import mpmath as mp
from mpmath import sqrt
mp.mp.dps = 40
p = sqrt(2)
def f(x):
    return p*x
代码语言:javascript
复制
# 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)
EN

回答 1

Stack Overflow用户

发布于 2021-06-04 20:21:56

在我看来,最简单的解决方案是声明一个类,它允许更新值D

rings.py

代码语言:javascript
复制
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 * x

convex.py

代码语言:javascript
复制
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))

我希望我正确理解了你的问题。如果这有帮助的话请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67842246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档