如何将主脚本中的变量导入辅助脚本的功能,该脚本由主脚本调用

时间:2018-01-27 10:10:16

标签: python import python-import

我想将主脚本中的变量导入辅助脚本的函数,主函数调用该函数。但是,当我运行脚本时似乎存在一些怪癖,因为辅助脚本的执行似乎并不顺利。

我的主要脚本script1.py有一个像这样的while循环:

variable_of_interest=1    
while True:

        from script2 import primitives1,main
        main(primitives1)
        time.sleep(0.01)
        print "test print" 
        variable_of_interest+=1

它从辅助脚本

调用函数main和primitives 1

我的辅助脚本script2.py是:

device = ssd1351(serial)

def primitives1(device, draw):
    global variable_of_interest #I want the function of this sec script to from script1 import variable_of_interest from the primary script, so I added this
    from script1 import variable_of_interest  #I want the function of this sec script to import variable_of_interest from the primary script, so I added this
    # First define some constants to allow easy resizing of shapes.
    padding = 2
    shape_width = 20 
    top = padding
    bottom = device.height - padding - 1
    # Write two lines of text.
    size = draw.textsize('123456789101112131415')
    x = device.width - padding - size[0]
    draw.rectangle((x, top + 4, x + size[0], top + size[1]), fill="black")
    draw.rectangle((x, top + 2, x + size[0], top + 16 + size[1]), fill="black")
    draw.text((device.width - padding - size[0], top + 44), 'My variable is: %s ' % variable_of_interest, fill="white") #Here is why the variable from the primary script is important
    time.sleep(0.01)


def main(prim_func):
    print("Testing basic canvas graphics...")
    for _ in range(2):
        with canvas(device) as draw:
            prim_func(device, draw)
            print("Drawing on display")
    time.sleep(0.01)

如上所述,当我执行此导入时,似乎存在延迟和一些怪癖(就好像脚本第一次没有注册此执行)。我觉得shpuld是一种更好的方法,可以将主脚本的变量引入辅助脚本,辅助脚本的功能由主脚本调用。不是在调用脚本2的函数中使用from script1 import variable_of_interest,而是调用函数的更好方法是注册主脚本的变量吗?

1 个答案:

答案 0 :(得分:1)

我会使用类似下面的内容

.
├── constants.py
├── script1.py
└── script2.py

0 directories, 3 files

并在from constants import variablescript1.py中使用script2.py

基本上,我会避免Python中的循环导入。它通常会使生活变得困难,因为很难对代码进行推理。在Python中,如果循环导入确实有效,则循环导入可能无法工作或导致问题。所以,我不会说这是个好主意。

编辑:请考虑以下示例。

.
├── package
│   ├── __init__.py
│   ├── script1.py
│   ├── script2.py
│   └── variable.py
└── script.py

1 directory, 5 files

其中,文件如下。

package/__init__.py

# This is package/__init__.py, it is an empty file just to make the package folder a Python package.

package/script1.py

from .variable import variable_holder

def function1():
    variable_holder["variable_of_interest"] += 1

package/script2.py

from .variable import variable_holder

def function1():
    variable_holder["variable_of_interest"] += 10

最后script.py

from package.script1 import function1
from package.script2 import function2
from package.variable import variable_holder

if __name__ == "__main__":

    print(variable_holder)
    function1()
    print(variable_holder)
    function2()
    print(variable_holder)

这是运行python script.py的输出。

$ python script.py
{'variable_of_interest': 0}
{'variable_of_interest': 1}
{'variable_of_interest': 11}

这是您使用variable_of_interest作为全局变量的方法。我希望这是有道理的。如果您有更多问题,请与我们联系。