繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM