当我在程序结束时定义它时,我可以在代码的开头使用全局变量吗?

当我在程序结束时定义它时,我可以在代码的开头使用全局变量吗?

问题描述:

我使用的代码如下所示:当我在程序结束时定义它时,我可以在代码的开头使用全局变量吗?

import os.path 

def def1(): 
    global filename 
    if os.path.isfile(filename+ ".txt") == True: 
     print ("Filename exists") 
    if os.path.isfile(filename+ ".txt") == False: 
     print("Filename dosent exist") 

def def2(): 
    global filename 
    filename = input("Please input the name if the file you want to see exists") 

def Main(): 
    def1() 
    def2() 

Main() 

什么代码所做的是检查文件是否存在,并且用户可以输入他/她希望检查文件的名称。此代码将用于更大的代码文件中。我无法理解为什么我得到这个错误,当我运行代码:

Traceback (most recent call last): 
File "/Users/Sid/Desktop/existfiletest.py", line 18, in <module> 
    Main() 
File "/Users/Sid/Desktop/existfiletest.py", line 15, in Main 
    def1() 
File "/Users/Sid/Desktop/existfiletest.py", line 5, in def1 
    if os.path.isfile(filename+ ".txt") == True: 
NameError: name 'filename' is not defined 

我已经定义的变量“文件名”中DEF2()一个全球性的,但我通过调用DEF1(开始程序)。变量'filename'是一个全局变量,所以我不明白为什么它不能在def1()中使用。而且,如果有人说先调用def2(),那么可以。不过,我想知道在定义它之前我是否可以使用变量,因为在我的较大代码中就是这种情况。

在此先感谢。

+0

同样的事情发生。 – Kronixion

+0

如何在定义它之前使用变量? Python不是老的Fortran。但是即使在旧的Fortran中,“类型”仍然被定义。在Python中,如果不定义它,则不能使用变量 – wander95

请勿使用全局变量。这是非常糟糕的做法。使用函数参数。您可以将您的代码更改为:

import os.path 

def def1(filename): 
    if os.path.isfile(filename+ ".txt") == True: 
     print ("Filename exists") 
    if os.path.isfile(filename+ ".txt") == False: 
     print("Filename dosent exist") 

def def2(): 
    return input("Please input the name if the file you want to see exists") 

def Main(): 
    filename = def2() 
    def1(filename) 

Main() 

当然,您在定义它之前不能使用变量。但是你可以用一些默认值来定义它。

+0

谢谢!但是有什么办法可以使用全局变量来做到这一点?我在整个代码中使用了全局变量 - 这只是该代码的一小部分。 – Kronixion

+0

@Kronixion你永远不必使用全局变量。但正如我所说,你可以在'def1'中用一些默认值来定义它 –

保存的文件名中的主要功能,然后将它传递给DEF1功能,像这样:

import os.path 

def def1(filename): 
    if os.path.isfile(filename+ ".txt") == True: 
     print ("Filename exists") 
    if os.path.isfile(filename+ ".txt") == False: 
     print("Filename dosent exist") 

def Main(): 
    filename = input("Please input the name if the file you want to see exists") 
    def1(filename) 

Main() 

排序答案:

取代:

def Main(): 
     def1() 
     def2() 

通过

def Main(): 
     def2() 
     def1() 

您的错误不在于你在文件的早期定义了全局变量。但通过首先调用def1,您已将变量保留为undefined。所以你必须先致电def2进行初始化并给它一个值。

其次,你不需要进行测试,如果两次:

def def1(filename): 
    if os.path.isfile(filename+ ".txt") == True: 
      print ("Filename exists") 
    else: 
      print("Filename does not exist")