我在将不同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
)
无论如何,我很想知道我之前的方法有什么问题。
答案 0 :(得分:1)
问题在于这个功能:
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字节码编译器创建一个具有相同名称的局部变量,并将赋值指向该变量。