为什么这会在函数外返回不同的值

时间:2016-02-10 08:41:55

标签: python variables

当我在函数内部打印变量时,它会打印出我想要的内容。但是,当我在函数外部打印它时,它会打印文件位置而不是文件中的实际值。

def go():
    username = os.getlogin()
    file2 = ('C:/Users/'+username+'/enteryourmessagehere.txt')
    if os.path.exists(file2):
        try:
            os.rename(file2,file2+"_")
            file = open('C:/Users/'+username+'/enteryormessagehere.txt', 'r').read()
            os.remove('C:/Users/'+username+'/enteryormessagehere.txt')
            main4()
            return file
        except OSError as e:

            file2 = open('C:/Users/'+username+'/enteryourmessagehere.txt_', 'r').read()
            os.remove('C:/Users/'+username+'/enteryourmessagehere.txt_')
            print (file2)
            main4()


    return file2

def main4():
    file2 = go()
    print (file2)

函数go里面的输出是文件中的任何内容,但函数main4的输出是C:/ Users /'+ username +'/ enteryormessagehere.txt

1 个答案:

答案 0 :(得分:2)

def go():
    username = os.getlogin()
    file2 = ('C:/Users/'+username+'/enteryourmessagehere.txt')
    # …
    return file2

def main4():
    file2 = go()
    print (file2)

这是代码的相关部分。 file2是文件名,因此当您返回file2时,您将返回文件名,并打印出该文件名。

file2确实会发生变化,但只有在OSError时才会发生变化。使用变量名来告诉你什么是真的,这是一个非常好的主意。例如。使用fileNamefilePath作为文件名或路径,对于文件内容,请使用能够明确表示某些内容的内容,例如fileContentuserMessage(如果在您的上下文中有意义的话)。

最后,我不确定你在那里做了什么。你在交替中递归地调用gomain,这看起来有点奇怪和不稳定。你应该考虑改变它。