我一直在尝试创建一个程序,该程序需要从文件中读取,然后将文件中的字符串作为程序中字符串的一部分。我写了一个我做的例子:
gameinfo = [0,0]
def readsave(savefile):
"Reads a file and adds its statistics to variables"
filename = savefile
with open(filename) as file_object:
gameinfo = file_object.readlines()
print(gameinfo)
readsave('gamesave.txt')
print (gameinfo)
但每当我运行此代码时,我似乎得到的只是:
['thisworks\n', '7']
[0, 0]
我想要将[0,0]
字符串更改为['thisworks\n, 7']
,但它只会在函数内部发生变化。有什么方法可以让这种变化全球化吗?
答案 0 :(得分:1)
这里的问题是范围,函数中的gameinfo
变量是本地变量,而不是全局变量。您可以将其声明为全局,或将gameinfo
作为参数传递。通常,我会避免全局声明,因为它们会让人感到困惑。我建议传递gameinfo:
def readsave(savefile, gameinfo=[0,0]): # Declare it as a default to the function.
"Reads a file and adds its statistics to variables"
with open(savefile) as file_object: # No need to rename this.
gameinfo = file_object.readlines()
return gameinfo # Return it so it escapes the scope of this function.
gameinfo = readsave('gamesave.txt') # Save it.
print(gameinfo) # Print it.
答案 1 :(得分:0)
变量不在函数中共享,这意味着您定义gameinfo = [0,0]
,但实际上您从未在函数中获得该变量。我想要保存在gameinfo
中,您需要使用return
或global
。 global
可以在函数内部和外部共享变量,但这被认为是不好的做法,所以不要使用它。
使用return
只需将其放入您的功能中即可。始终确保每个调用只返回一个变量,字符串,整数。
以下是您重写的示例,其中包含我上面提到的return
语句:
gameinfo = [0,0]
def readsave(savefile):
"Reads a file and adds its statistics to variables"
filename = savefile
with open(filename) as file_object:
gameinfo = file_object.readlines()
print(gameinfo)
return gameinfo
gameinfo = readsave('gamesave.txt')
print (gameinfo)
你还犯了其他一些错误:
"Reads a file and adds its statistics to variables"
不是评论。使用"""my text here"""
(三引号)或#my text here
插入评论。
您在阅读Python教程时将学到的所有这些内容。 Here is one illustrating the use of return
。