当我在程序结束时定义它时,我可以在代码的开头使用全局变量吗?
我使用的代码如下所示:当我在程序结束时定义它时,我可以在代码的开头使用全局变量吗?
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(),那么可以。不过,我想知道在定义它之前我是否可以使用变量,因为在我的较大代码中就是这种情况。
在此先感谢。
请勿使用全局变量。这是非常糟糕的做法。使用函数参数。您可以将您的代码更改为:
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()
当然,您在定义它之前不能使用变量。但是你可以用一些默认值来定义它。
谢谢!但是有什么办法可以使用全局变量来做到这一点?我在整个代码中使用了全局变量 - 这只是该代码的一小部分。 – Kronixion
@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")
同样的事情发生。 – Kronixion
如何在定义它之前使用变量? Python不是老的Fortran。但是即使在旧的Fortran中,“类型”仍然被定义。在Python中,如果不定义它,则不能使用变量 – wander95