Python导入全局变量的行为不一致

时间:2014-09-15 18:37:46

标签: python

我在将不同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

无论如何,我很想知道我之前的方法有什么问题。

1 个答案:

答案 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字节码编译器创建一个具有相同名称的局部变量,并将赋值指向该变量。