我可以使用另一个文件中的函数来使用要调用的文件中的变量吗?

时间:2019-02-16 15:34:09

标签: python

我正在学习opencv,为了使我不必滚动数百行代码变得容易,我制作了两个文件,分别为file1.py和file2.py。

我要使用的所有功能都在file1.py中,而我从file2.py中调用它们。 file1.py中的函数是:

def main(title="Test", func=None):

    global img, original_img

    cv2.namedWindow(title)

    cv2.setMouseCallback(title, func)

    while True:
        cv2.imshow(title, img)

        if func == draw_shape:
            k = cv2.waitKey(1)
            if k == ord('m') or k == ord('M'):
                shape = not shape
            elif k == 27:
                break
        else:
            if cv2.waitKey(1) == 27:
                break

    cv2.destroyWindow(title)

def draw_shape(event, x, y, flags, param):
    global ix, iy, shape, drawing, fill, img, original_img

    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        ix, iy = x, y
    elif event == cv2.EVENT_MOUSEMOVE:
        if drawing:
            if shape:
                cv2.rectangle(img, (ix, iy), (x, y), (0, 244, 0), fill)
            elif not shape:
                cv2.circle(img, (x, y), 20, (0, 0, 244), fill)
    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        img = deepcopy(original_img)

file1.py中有很多代码有相同的问题(我将在稍后解释),为了节省空间,我将其省略。

我知道我可以修改main()并将img传递给它,但是问题开始于与cv2.setMouseCallback关联并自动调用的draw_shape()。因此,我不能只是将变量(例如ix,绘图等)传递给draw_shape(),而这些变量在我在file1.py本身中调用main()时是全局的。

但是现在当我创建了file2.py并想从那里调用main()时,我不再能够传递这些变量。

file2.py中的代码如下:

from file1 import main, draw_shape

if __name__ == "__main__":
    imagepath = "some\path\someImage.jpg"
    img = cv2.imread(imagepath, 0)
    original_img = deepcopy(img)
    ix, iy, fill = (-1, -1, 0)
    shape, drawing = True, False
    main(title='XYZ', func=draw_shape)

有没有建议我如何使main()和draw_shape()使用变量,我已经从file2.py中使用了与它们所需的名称相同的名称(或者是否有其他方法将变量传递给它们)?

2 个答案:

答案 0 :(得分:0)

Python packaging允许您使用以下命令从另一个文件导入文件:

from python_package import function

但是,更Python化的方式是将其放置在同一文件中。

您可以阅读有关Python中的软件包和模块的更多信息-here

答案 1 :(得分:0)

如果这是构造代码的方式,则需要执行以下操作

#file1.py
#add image as an argument
def main(title = "Test", func = None, image = None):
    ...

#file2.py
from file2 import main

...

main(title = 'XYZ', image = img)

但是就像霍迪瑟说的那样。只需将它们放在一个文件中,您最终将拥有数百个(如果不是数千个)文件,其中只有一段代码长度。