函数的Python返回列表

2024-04-26 22:40:55 发布

您现在位置: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

有什么简单的我做错了吗?或者有没有更好的方法在函数之间传递变量而不使用全局变量?


Tags: 文件函数inhome列表fordefline
3条回答

函数中变量的名称在外部不可见,因此需要这样调用函数:

networks = splitNet()
print(networks)

其他几点注意事项:

  • 您可能希望使用yield将函数转换为迭代器。
  • 不需要调用readlines;函数本身就是一个迭代器。
  • 您的函数可能正在泄漏文件句柄。使用with语句。
  • 您可以使用str.split,这比string.split更易读和理解。
  • 您的文件看起来是CSV文件。使用^{} module

总之,您的代码应该是这样的:

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)

不能在定义变量的函数范围之外访问变量。

只需这样做:

network = splitNet()
print network

我假设您没有将返回值赋给作用域中的变量。

你不能这样做

splitNet()
print network

相反,你会

network = splitNet()
print network

或者就这件事

my_returned_network_in_scope = splitNet()
print my_returned_network_in_scope

否则,可以在splitNet函数之外声明network,并使其成为全局的,但这不是推荐的方法。

相关问题 更多 >