我对核心Python了解很多,但类部分对我来说有点神秘。
例如我很难理解
sympy.ntheory.primetest
sympy 的文档包括可评估为的素性测试
sympy.ntheory.primetest.isprime(n)
https://docs.sympy.org/latest/modules/ntheory.html#sympy.ntheory.primetest.isprime
所以如果我想引用 isprime 而不需要所有前面的东西,我可以这样做
(1) 从 sympy.ntheory.primetest 导入 isprime
然后 isprime(31) 例如,将返回 True。
不过我也可以
(2) 从 sympy.ntheory 导入 isprime
然后 isprime(31) 也可以工作。所以primetest部分是多余的。
所以问题是为什么(1)和(2)都有效?
我本以为只有 (1) 就可以。
为了增加更多混乱,请考虑 is_square
根据文档,我们有,
sympy.ntheory.primetest.is_square
但是为了单独使用 is_square ,我必须这样做
从 sympy.ntheory.primetest 导入 is_square
而如果我这样做
from sympy.ntheory import is_square
我收到错误
导入错误:无法从“sympy.ntheory”导入名称“is_square”
因此,其中一些方法似乎缺乏对称性。
在 is_square 情况下,我需要在导入语句中包含 primetest 以避免出现错误,而对于 isprime 来说,包含 primetest 或省略它都没有区别。为什么有区别?