[英]Python importing global variables inconsistent behaviour
我无法将变量从其他python文件导入到当前文件中。 我知道之前已经有人问过这个问题,而我几乎尝试了所有这些解决方案,但是没有用。
在文件top.py中:
import sys, getopt, pdb
import argparse
import my_parser
my_parser.start_parse(6)
my_parser.in_out(2)
print "info: ",my_parser.verilog_inps
print "N1 data: ",my_parser.ckt_data["N1"]
在文件parser.py中(仅前几行):
from collections import defaultdict
ckt_data = {}
global verilog_inps
verilog_inps = []
global verilog_outs
verilog_outs = []
global levels
levels = []
level_dict = defaultdict(list)
class ckt_elements:
delay = 0
inp_ = {}
out_ = {}
level = 0
change = False
prev = {}
typ_ = ""
def start_parse(a):
ckt_data["N1"] = a
def in_out(a):
verilog_inps = [a,a+1,a+2]
奇怪的是,我能够访问某些变量,而对其他变量却无法访问(我声明了全局不可访问变量,以查看是否有帮助,但没有帮助)
上述全局变量正在parser.py中的函数中进行修改。
因此,我的问题是:为什么会有这种奇怪的行为? 难道我做错了什么? 使用python 2.7
如果问题不够清楚,请告诉我(我不知所措以更好地解释这一点)
编辑
我已经通过使用全局定义文件解决了我面临的问题。 在一个单独的文件中,我声明了变量,然后将文件导入所有相关文件。 (使用import globals
)
无论如何,我很想知道以前的方法出了什么问题。
问题在于此功能:
def in_out(a):
verilog_inps = [a,a+1,a+2]
实际上不会影响全局verilog_inps
变量。 它正在分配给本地。 您需要将global
声明放入要分配给全局变量的每个函数中:
def in_out(a):
global verilog_inps
verilog_inps = [a,a+1,a+2]
或函数中的赋值将导致Python字节码编译器创建一个具有相同名称的局部变量,并将赋值目标指向该变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.