Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从函数中引用全局变量?_Python_Global_Var_Python 3.4 - Fatal编程技术网

Python 如何从函数中引用全局变量?

Python 如何从函数中引用全局变量?,python,global,var,python-3.4,Python,Global,Var,Python 3.4,嗨,我是一个初学者程序员。我不知道如何从函数中调用变量。 我有两个defcalcular()和guardar()。我从calcular()中获取了一些变量,稍后我将调用这些变量,但当我在guardar()中调用变量时,它告诉我变量未定义。我试着制作全局var,但它不起作用。希望你能帮助我 这是我的一点代码 def calcular(): if nClient == "": texto = ("Inserta Numero de cliente") ven

嗨,我是一个初学者程序员。我不知道如何从函数中调用变量。 我有两个def
calcular()
guardar()
。我从
calcular()
中获取了一些变量,稍后我将调用这些变量,但当我在
guardar()
中调用变量时,它告诉我
变量未定义。我试着制作
全局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

如果你真的想要一个全局变量,你应该在任何函数之外定义它

txtD1 = None
def calcular():
    ...
然后它将存在于模块级别。但是,globals很少是您应该使用的解决方案(读取:从不),相反,您应该从函数中返回信息,而不是修改全局状态。然后将该信息传递到另一个函数中使用


python中的
global
关键字表示您正在引用一个全局变量,而不是创建一个新变量。但是,在您的代码中不存在这样的名称,因此您实际上没有引用任何东西。

如果您确实需要一个全局变量,您可以在任何函数之外定义它

txtD1 = None
def calcular():
    ...
然后它将存在于模块级别。但是,globals很少是您应该使用的解决方案(读取:从不),相反,您应该从函数中返回信息,而不是修改全局状态。然后将该信息传递到另一个函数中使用

python中的
global
关键字表示您正在引用一个全局变量,而不是创建一个新变量。但是,在您的代码中不存在这样的名称,因此您实际上没有引用任何内容。

首先在全局某个位置创建“数据库”

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,...]
然后,您将存储返回的值(或在返回后立即对其进行处理)

首先在全局某个位置创建“数据库”

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,...]
然后,您将存储返回的值(或者在返回值后立即对其进行处理)