我想将主脚本中的变量导入辅助脚本的函数,主函数调用该函数。但是,当我运行脚本时似乎存在一些怪癖,因为辅助脚本的执行似乎并不顺利。
我的主要脚本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
,而是调用函数的更好方法是注册主脚本的变量吗?
答案 0 :(得分:1)
我会使用类似下面的内容
.
├── constants.py
├── script1.py
└── script2.py
0 directories, 3 files
并在from constants import variable
和script1.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
作为全局变量的方法。我希望这是有道理的。如果您有更多问题,请与我们联系。