2014-12-17 3 views
0

안녕하세요 저는 초급 프로그래머입니다. 어떻게 함수에서 변수를 호출 할 수 있는지 모르겠습니다. 두 개의 def calcular()guardar()이 있습니다. 나중에 호출 할 calcular()에서 변수를 가져 오지만, guardar()에서 변수를 호출하면 variable is not defined이라고 알려줍니다. global var을 만들려고했으나 작동하지 않습니다. 당신이 정말로 전역 변수를 원하는 경우함수 내에서 전역 변수를 참조하려면 어떻게해야합니까?

def calcular(): 

    if nClient == "": 
     texto = ("Inserta Numero de cliente") 
     ventanaMensaje(texto) 
    else: 
     if cl1=="": 
      texto = ("Inserta Clave") 
      ventanaMensaje(texto)  
     else: 
      if aB1 == "": 
       texto = ("Inserta Cantidad") 
       ventanaMensaje(texto) 
      else: 
       try: 
        clt = open("preciosEsp.txt","r+") 
        lClt = clt.readlines() 
        rClt = lClt[0] 
        sClt = rClt.split("'") 
        nRClt = sClt[0] 

        if nClient == nRClt: 
         cReg=sClt[1] 

         if cl1== cReg: 
           prc=sClt[2] 
         else: 
          k=1 
          while cl1 != cReg: 
           cReg=sClt[k] 
           k=k+2 
           if cl1== cReg: 
            ñ=k-1 
            prc=sClt[ñ] 
        else: 
         x = 0 
         while nClient != nRClt: 
          rClt = lClt[x] 
          sClt = rClt.split("'") 
          nRClt = sClt[0] 
          x=x+1 
          if nClient == nRClt: 
           cReg=sClt[1] 
           if cl1==cReg: 
            prc=sClt[2] 
           else: 
            k=1 
            while cl1 != cReg: 
             cReg=sClt[k] 
             k=k+2 
             if cl1== cReg: 
              ñ=k-1 
              prc=sClt[ñ] 

        indice=int(prc)+3 

        pdcts = open("productos.txt","r+") 
        lPdcts = pdcts.readlines() 
        rPdcts = lPdcts[0] 
        sPdcts= rPdcts.split("'") 
        nPdcts = sPdcts[0] 
        t = 0 
        if cl1 == nPdcts: 
         precio1=sPdcts[indice] 
         global txtD1################## MAKE A GLOBAL VAR 
         txtD1=sPdcts[1] #### THIS IS THE VARIABLE ######## 
def guardar(): 

    guardarDatos = (n+txtD1) ################# I CALL HERE, BUT TELL ME THAT VARIABLE IS NOT DEFINED 

답변

3

, 당신은 어떤 기능

txtD1 = None 
def calcular(): 
    ... 

의 외부를 정의하는 것입니다 ... 당신이 나에게

이 내 코드의 조금을 도울 수 있기를 바랍니다 그러면 모듈 수준에서 존재하게됩니다. 그러나 전역 변수는 사용하려는 솔루션이 거의 읽히지 않습니다. 대신 전역 상태를 수정하는 대신 함수에서 정보를 얻어야합니다. 그 정보를 다른 기능으로 전달하여 사용할 수 있습니다.

python의 global 키워드는 글로벌 변수를 참조하고 새 변수를 작성하지 않는다고 말합니다. 그러나 코드에는 이러한 이름이 없으므로 실제로는 아무 것도 참조하지 않습니다.

1

최초의 글로벌 귀하의 "데이터베이스"어디를 작성 지금

clt = dict(map(lambda x:x.split(" ",1),open("preciosEsp.txt","r+")) 

당신은 어디에서나을 ACESS 수

clt.get(nClient) 

다음 한 calcular 값은 당신이 다음

def calcular(): 
    ... 
    precio = clt.get(nClient) 
    return [precio,nClient,...] 

를 원하는 반환해야합니다 당신 반환 된 값을 저장합니다 (또는 반환되는 즉시 그 값을 사용합니다).

관련 문제