2014-09-15 4 views
0

다른 파이썬 파일에서 현재 변수로 변수를 가져 오는 데 문제가 있습니다. 이전에 여러 번 물어 본 적이 있지만 거의 모든 해결책을 시도했지만 사용하지는 않았습니다. 파일 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의 함수에서 수정되고있다.

그래서 내 질문 : 왜 이상한 행동입니까? 내가 뭔가 잘못하고 있는거야? 파이썬을 사용하여 2.7

이 문제는 편집이

내가가 직면하고있는 문제를 해결 한

(I이 더 잘 설명하기 딱하다) 충분히 명확하지 않은 경우 알려 주시기 바랍니다 전역 정의 파일을 사용합니다. 별도의 파일에서 변수를 선언하고 모든 관련 파일에 파일을 가져 왔습니다. (import globals 사용)

어쨌든 나는 이전의 접근 방식에 무엇이 잘못되었는지 궁금하다.

def in_out(a): 
    verilog_inps = [a,a+1,a+2] 

실제로 글로벌 verilog_inps 변수에 영향을 미치지 않습니다

+0

@BrenBarn, 이런 종류의 코드 형식 지정 방법에 대한 정보가 담긴 링크를 알려주십시오. 나는 등등 강조하는 색깔을 얻지 않는다 ... 거기 교환기에있는 정력과 같은 몇몇 편집자는 있는가? – sanjay

+1

문제가있는 [짧은 자체 포함 실행 가능한 예] (http://sscce.org/)를 제공하십시오. 이 코드를 실행하려고했지만'AttributeError : 'module'객체에 'start_parse'속성이 없습니다. – Kevin

+1

Re : 코드 서식을 지정하는 가장 간단한 방법은 코드를 붙여넣고 강조 표시 한 다음 Ctrl-K를 누르는 것입니다. 이렇게하면 모든 행을 4 개의 공백만큼 들여 씁니다.이 행은 색상 강조 표시 등을 적용하기 위해 마크 업 시스템에 신호를 보냅니다. – Kevin

답변

1

문제는이 기능이 있다는 것입니다. 그것은 지역에 배정 중입니다. 함수 내부

def in_out(a): 
    global verilog_inps 
    verilog_inps = [a,a+1,a+2] 

또는 할당이 파이썬 바이트 코드 컴파일러는 같은 이름의 지역 변수를 만들고을 대상으로하게됩니다 : 당신은 당신이 전역 변수에 할당 할 경우 각 함수 내부의 global 선언을 둘 필요 해당 변수에 할당.

+0

고마워요! 그건 내 문제를 해결하지만 또 하나의 질문이 있습니다 ... 처음에는'from * import * '를 사용하여 실행을 시도했는데이 경우 모든 변수를 전역으로 선언하지 않았고 (어쨌든 모든 것을 가져 왔으므로) 여전히 직면했습니다 같은 문제 – sanjay

+2

@sanjay :'from' 수입은 원본과 동일한 이름을 가진 새로운 독립 변수를 만들기 때문에 원래 변수에 대한 할당은'from' 수입으로 변수를 가져 오는 모듈에 반영되지 않습니다. 이는 전역 변수를 사용하지 않는 이유와 '수입'수입을 사용하지 않는 이유 모두로 간주 될 수 있습니다. – user2357112

+0

고마워요! 특정 파일에서 전역 파일을 만드는 것을 멀리 할 것입니다. 대신에 별도의 global_var 파일에 파일을 만들겠습니다. 복잡성을 낮추는 데 도움이됩니다. – sanjay

관련 문제