我想创建一个像NumPy一样工作的Python模块。这些方法不仅是模块源中树的叶子中的子模块。有一个包含许多我可以直接调用的方法的根模块,还有一些子模块。问题是根方法必须在某处定义。我当时想拥有一个目录结构:
module/
__init__.py
core.py
stuff1.py
submodule/
__init__.py
stuff2.py
stuff3.py
Run Code Online (Sandbox Code Playgroud)
现在,我希望将“ core”内部的所有内容导入“ module”命名空间,就好像它是一个module.py文件,而core.py的内容都在此module.py内部。问题在于模块是目录而不是文件,那么如何定义应该位于模块根目录中的这些方法?
我尝试将“ from core import *”放在init .py中,但这没有用。(编辑:实际上是。)
我是否应该在“ module.py”文件以及模块目录中包含核心方法?我不知道这是否可行,但是看起来很尴尬。
我正在创建一个聊天main.py机器人,commands.py它有 2 个主要文件,它运行机器人并包含机器人识别的命令。我试图从中获取函数名称commands.py,以便在main.py. 例如:
命令.py
def add():
pass
def delete():
pass
def change():
pass
Run Code Online (Sandbox Code Playgroud)
基本上,我希望能够存储在变量commands = ['add', 'delete', 'change']或类似的东西中。我对装饰器没有任何经验,但这可能是使用它的好时机吗?能够使用装饰器注册命令?我愿意接受任何建议,谢谢!
我正在学习java,来自python有很多我不完全理解的东西存在于java中,其中第一个必须是公共和私有声明.我的意思是从一种没有真正可见的公共私人声明的语言到一切必须是私人的语言,我理解他们所做的基本原则.我问'为什么'他们这样做.为什么有人会关心谁接触私处?如果你是一个优秀的程序员,你应该知道你应该'和'不应该'在代码中戳的那些位,这应该不是一个问题.为什么要保密呢?为什么隐藏,模糊,让世界变得私密?为什么要开始照顾.
下面的代码完美无缺,然而,PyCharm抱怨语法错误 forward(100)
#!/usr/bin/python
from turtle import *
forward(100)
done()
Run Code Online (Sandbox Code Playgroud)
既然turtle是stanrd库我不认为我需要做额外的配置,对吗?

我已经阅读过有人可以在Python中解释__all__吗?我明白它只影响from ... import *陈述,但我无法弄清楚一个真实的用例.__all__当我可以简单地避免在__init__命名空间中导入这些名称时,为什么要在(DRY!)中重复导出的名称?
例:
mypackage/__init__.py
from a import A
Run Code Online (Sandbox Code Playgroud)
mypackage/a.py
A = "A"
A1 = "A1"
Run Code Online (Sandbox Code Playgroud)
mypackage/b.py
B = "B"
Run Code Online (Sandbox Code Playgroud)
然后在python中:
>>> from mypackage import *
>>> A
'A'
>>>
>>> A1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'A1' is not defined
>>> b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
Run Code Online (Sandbox Code Playgroud)
正如你所看到的A是在命名空间,但 …
假设我有一个要导入一些包的文件:
# myfile.py
import os
import re
import pathlib
def func(x, y):
print(x, y)
Run Code Online (Sandbox Code Playgroud)
如果我进入另一个文件并输入
from myfile import *
Run Code Online (Sandbox Code Playgroud)
它不仅导入,还func导入os、、、、repathlib
但我不希望在导入时导入这些模块import *。
为什么它会导入我正在导入的其他包以及如何避免这种情况?
例如,如果我创建一个类 Point。
类点:
def__init__(self, x, y):
self._x = x
self._y = y
Run Code Online (Sandbox Code Playgroud)
和
类点:
def__init__(self, x, y):
self.x = x
self.y = y
Run Code Online (Sandbox Code Playgroud)
self._x 和 self.x 的使用有什么区别。
如果您有类似的模块module,是否可以绕过它并使用内部可用的功能而不使用模块?
我导入了模块,但编译器仍抱怨不必查找function.我还是要用module.function().
它有更多的功能,所以我不想一个接一个地重新定义它们,但module如果可能的话就避免输入.