Python从函数返回列表

时间:2012-02-16 18:35:01

标签: python list function

我有一个将文件解析为列表的函数。我正在尝试返回该列表,以便我可以在其他功能中使用它。

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

是否有一些简单的我做错了或者是否有更好的方法在不使用全局变量的情况下在函数之间传递变量?

9 个答案:

答案 0 :(得分:45)

无法在定义函数范围之外访问变量。

只需这样做:

network = splitNet()
print network

答案 1 :(得分:14)

我假设您没有将返回值分配给范围内的变量。

即。你做不到

splitNet()
print network

相反,你会

network = splitNet()
print network

或者就此而言

my_returned_network_in_scope = splitNet()
print my_returned_network_in_scope

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

答案 2 :(得分:6)

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

networks = splitNet()
print(networks)

其他几点说明:

  • 您可能希望使用yield将函数转换为迭代器。
  • 您无需致电readlines;函数本身就是一个迭代器。
  • 您的功能可能是文件句柄泄漏。使用with声明。
  • 您可以使用str.splitstring.splitimport 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) 更易读,更易于理解。
  • 您的文件看起来像是一个CSV文件。使用csv module

总之,这是您的代码的样子:

{{1}}

答案 3 :(得分:4)

您的函数正在返回一个列表,因此您必须将其分配给变量,而不是尝试打印它。

network = splitNet()
print network

例如

>>> def mylist():
...    myl = []
...    myl.append('1')
...    return myl
...
>>> my_list = mylist()
>>> my_list
['1']
>>>

答案 4 :(得分:2)

你真的打过电话吗?这很好(在Python解释器中)

 >>> def f():
 ...   network = []
 ...   network.append(1)
 ...   network.append(2)
 ...   network.append(3)
 ...   return network
 ...
 >>> network = f()
 >>> print network
 [1, 2, 3]

答案 5 :(得分:1)

L=[1, 2, 3]

def rl(l): 
    return l

[*ll] = rl(L) # ll is in a list

ll
# >>> [1, 2, 3]

*t, = rl(L)   # ll is in a tuple

t
# >>> [1, 2, 3]

答案 6 :(得分:0)

您可以将分配给列表的变量的名称声明为global,如下所示:

def get_list():
    global destination_list
    destination_list = []
    destination_list.extend(('1','2','3'))
    return destination_list

get_list()
print(destination_list)

答案 7 :(得分:0)

如果要从定义中返回项目或列表,则可以先对其进行定义,然后在该定义的初始编写过程中将其用作变量。除非必须在定义内定义。在这种情况下,您无需在末尾写回车命令。

network = []

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)

print network # Will print the list you've appended. But it is now a usable object. 

答案 8 :(得分:0)

L=[1,2,3]
def rl(l): return l

[*ll]=rl(L) #ll is in a list
ll

出局[45]:[1、2、3]

*t,=rl(L) #ll is in a tuple
t

退出[47]:[1、2、3]