微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

导入时传递输入?

如何解决导入时传递输入?

我正在开发一个项目,我的代码分布在不同的文件中;例如,在 convex.py 中,我通过在顶部调用 rings.py调用我在 from rings import * 中编写的方法。在 rings 中,我使用 p 定义了一个常量 mpmath,它用于 rings 的各种函数中,因此它取决于我手写到 {{ 1}}(例如通过 rings)。但是,当使用 mpmath.mp.dps = 40 时,我稍后可能希望 convex 具有更高的精度。当我将它导入到 p 时,有没有办法让 rings 接受一些输入?例如也许我想要一次 50 位十进制数字,下次使用 100 位,所以完美的解决方案是让 convex 接受输入 rings 并在那里设置 D,然后在 { {1}} 可能有

mpmath.mp.dps = D

(然后在文件的其他地方使用 convex,我也可以自由更改 D = 50 from rings[D] import * (以及我想在 D 中更改的任何其他内容,而无需更改)每次都回到D))。 (上面建议的符号是将 convex 视为 rings函数。)

我看到的唯一具体解决方法修改我的每个 rings 方法,以将输入作为我在 {{1} 中定义的依赖于精度的常量的all },在D中重新定义它们,然后将它们作为参数传递;但这似乎是一个笨拙且整体糟糕的解决方案。

如果我能澄清其中任何一个,请告诉我。提前致谢。

编辑:示例代码

rings
rings

解决方法

我脑子里最直接的解决方案是声明一个类,它允许更新值 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 * x

凸面.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))

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。