这就是情况。我正在使用 Python 3.6
我目前有下一个文件夹组织:
/MainProject
__init__.py
/Folder1
pyscript1.py
pyscript2.py
__init__.py
/Folder2
pyscript3.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
所以,我试图从 pyscript3 获取一个存在于 pyscript1.py 中的函数。我还在每个级别添加了一个init .py。在 pyscript3.py 中,我尝试了以下操作:
from . import Folder1
Run Code Online (Sandbox Code Playgroud)
给出错误:
ImportError: cannot import name 'Folder1'
Run Code Online (Sandbox Code Playgroud)
我也试过:
from .Utils import script1
Run Code Online (Sandbox Code Playgroud)
给出错误:
ModuleNotFoundError: No module named '__main__.Utils'; '__main__' is not a
package
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过以下方式使用 sys 和 os 解决它:
sys.path.append(os.path.realpath('../..'))
Run Code Online (Sandbox Code Playgroud)
但我想知道不使用 sys.path 是否可行。
我正在使用反射创建一个对象的实例,并在对象的类中获取方法,但是当我必须使用类型数组Type来避免歧义问题时,问题就来了,这里是我的代码示例我试图达到.
public class BigClass
{
public void getSomething(XmlDocument doc, ref CustomObject obj) {...}
public void getSomething(XmlDocument doc, ref CustomObject obj, string id) {...}
}
Run Code Online (Sandbox Code Playgroud)
此代码来自外部程序集(file.dll),我正在使用下一个代码.
Assembly a = Assembly.LoadFrom("file.dll");
Type s = a.GetType("FileNamespace.BigClass");
MethodInfo inf = s.GetMethod("getSomething", new [] {typeof(XmlDocument), typeof(CustomObject), typeof(string)});
Run Code Online (Sandbox Code Playgroud)
要获取MethodInfo使用3个参数的对象,但变量"inf"为空,我认为因为它没有找到使用"ref"的参数的方法.
有办法解决这个问题吗?
我有下一个清单
testList = []
testList.append([0,-10])
testList.append([-12,122])
testList.append([13,172])
testList.append([17,296])
testList.append([-10,80])
testList.append([-16,230])
testList.append([-18, 296])
testList.append([-2, -8])
testList.append([-5,10])
testList.append([2,-4])
Run Code Online (Sandbox Code Playgroud)
和另一个包含前一个列表中元素的列表:
m1 = []
m1.append([0, -10])
m1.append([13, 172])
Run Code Online (Sandbox Code Playgroud)
然后我尝试testList使用下一个语句从列表中获取一个子数组:
[element for i, element in enumerate(testList) if i not in m1]
Run Code Online (Sandbox Code Playgroud)
但是我得到了同样的清单testList.
我怎样才能做到这一点?