[英]Python return list from 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
有什么簡單的我做錯了還是有更好的方法在函數之間傳遞變量而不使用全局變量?
變量不能在它們定義的函數范圍之外訪問。
只需這樣做:
network = splitNet()
print network
我假設您沒有將返回值分配給范圍內的變量。
即。 你不能這樣做
splitNet()
print network
相反,你會
network = splitNet()
print network
或者就此而言
my_returned_network_in_scope = splitNet()
print my_returned_network_in_scope
否則你可以在splitNet函數之外聲明網絡,並使其成為全局網絡,但這不是推薦的方法。
函數中的變量名稱在外部不可見,因此您需要像這樣調用函數:
networks = splitNet()
print(networks)
其他幾點說明:
readlines
; 函數本身是一個迭代器。 with
語句。 str.split
,它比string.split
更易讀,更易於理解。 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)
您的函數返回一個列表,因此您必須將其分配給變量,而不是嘗試打印它。
network = splitNet()
print network
例如
>>> def mylist():
... myl = []
... myl.append('1')
... return myl
...
>>> my_list = mylist()
>>> my_list
['1']
>>>
你真的打電話給這個功能嗎? 這工作正常(在Python解釋器中)
>>> def f():
... network = []
... network.append(1)
... network.append(2)
... network.append(3)
... return network
...
>>> network = f()
>>> print network
[1, 2, 3]
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]
您可以將分配給列表的變量的名稱聲明為global
,如下所示:
def get_list():
global destination_list
destination_list = []
destination_list.extend(('1','2','3'))
return destination_list
get_list()
print(destination_list)
如果要從定義中返回項目或列表,可以事先定義它並在初始寫入所述定義期間將其用作變量。 除非必須在定義中定義。 在這種情況下,您不需要在結尾處寫入返回命令。
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.
L=[1,2,3]
def rl(l): return l
[*ll]=rl(L) #ll is in a list
ll
*t,=rl(L) #ll is in a tuple
t
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.