Python 从函数返回列表
我有一个函数,它可以把一个文件解析成一个列表。我想把这个列表返回,这样我就可以在其他函数中使用它。
def splitNet():
network = []
for line in open("/home/tom/Dropbox/CN/Python/CW2/network.txt","r").readlines():
line = line.replace("\r\n", "")
line = string.split(line, ',')
line = map(int, line)
network.append(line)
return network
但是当我试着在函数外面打印这个列表(为了调试)时,我遇到了这个错误:
NameError: name 'network' is not defined
我是不是做错了什么简单的事情,或者有没有更好的方法在函数之间传递变量,而不使用全局变量?
8 个回答
8
函数里的变量名在外面是看不见的,所以你需要这样调用你的函数:
networks = splitNet()
print(networks)
还有几点补充:
- 你可能想把你的函数改成一个迭代器,可以使用 yield 这个关键字。
- 你不需要调用
readlines
;因为这个函数本身就是一个迭代器。 - 你的函数可能在泄露文件句柄,建议使用
with
语句。 - 你可以使用
str.split
,这样比string.split
更容易读懂。 - 你的文件看起来像是一个CSV文件,可以使用
csv
模块。
总之,你的代码应该像这样:
import csv
def splitNet():
with open("/home/tom/Dropbox/CN/Python/CW2/network.txt") as nf:
for line in csv.reader(nf, delimiter=','):
yield map(int, line)
network = list(splitNet())
print (network)
18
我猜你没有把返回的值赋给一个可以使用的变量。
也就是说,你不能这样做:
splitNet()
print network
你应该这样做:
network = splitNet()
print network
或者这样:
my_returned_network_in_scope = splitNet()
print my_returned_network_in_scope
另外,你也可以把网络变量放在splitNet函数外面,这样它就变成全局变量了,但这样做并不是推荐的方式。
64
变量不能在它们被定义的函数外部被访问。
你只需要这样做:
network = splitNet()
print network