2014-12-17 5 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(): 
    ... 

он будет существовать на уровне модуля. Тем не менее, глобальные переменные редко (читайте: никогда) решение, которое вы должны использовать, вместо этого вы должны быть return информация из функций, а не изменение глобального состояния. Затем вы передадите эту информацию в другую функцию.

Ключевое словов python говорит, что вы ссылаетесь на глобальную переменную, не создавая новую. Однако в вашем коде нет такого имени, поэтому вы на самом деле ничего не ссылаетесь.

1

первым создать "базу данных" где-то глобальное

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

теперь вы можете Асесс его в любом месте с

clt.get(nClient) 

следующий calcular должен возвращать значения, которые вы хотите

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

то будет хранить возвращаемые значения (или делать что-то с ними, как только они будут возвращены)

Смежные вопросы