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

时间:2016-12-06 23:17:03

标签: python variables global

我正在使用的代码如下所示:

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

我已经将变量'filename'定义为def2()中的全局变量,但是我通过调用def1()来启动程序。变量'filename'是全局的,所以我不明白为什么它不能在def1()中使用。而且,如果有人说首先调用def2(),那么这是有效的。但是我想知道在定义它之前是否可以使用变量,因为在我更大的代码中就是这种情况。

提前致谢。

3 个答案:

答案 0 :(得分:1)

排序答案:

取代:

    def Main():
       def1()
       def2()

通过

    def Main():
       def2()
       def1()

您的错误不在于您在文件中先前定义了全局变量。但是首先调用def1,你已经将变量保留为undefined。因此,您必须先调用def2进行初始化并为其赋值。

其次,您不需要执行两次if测试:

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

答案 1 :(得分:0)

不要使用全局变量。这真的是不好的做法。使用函数参数。您可以将代码更改为:

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()

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

答案 2 :(得分:0)

将文件名保存在main函数中,然后将其传递给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()