Tho*_*ell 38 python function list
我有一个将文件解析为列表的函数.我正在尝试返回该列表,以便我可以在其他功能中使用它.
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
Run Code Online (Sandbox Code Playgroud)
当我尝试在函数外部打印列表(用于调试)时,我收到此错误:
NameError: name 'network' is not defined
Run Code Online (Sandbox Code Playgroud)
有什么简单的我做错了还是有更好的方法在函数之间传递变量而不使用全局变量?
Ale*_*lan 49
变量不能在它们定义的函数范围之外访问.
只需这样做:
network = splitNet()
print network
Run Code Online (Sandbox Code Playgroud)
sbe*_*rry 14
我假设您没有将返回值分配给范围内的变量.
即.你不能这样做
splitNet()
print network
Run Code Online (Sandbox Code Playgroud)
相反,你会
network = splitNet()
print network
Run Code Online (Sandbox Code Playgroud)
或者就此而言
my_returned_network_in_scope = splitNet()
print my_returned_network_in_scope
Run Code Online (Sandbox Code Playgroud)
否则你可以在splitNet函数之外声明网络,并使其成为全局网络,但这不是推荐的方法.
函数中的变量名称在外部不可见,因此您需要像这样调用函数:
networks = splitNet()
print(networks)
Run Code Online (Sandbox Code Playgroud)
其他几点说明:
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)
Run Code Online (Sandbox Code Playgroud)
您的函数正在返回一个列表,因此您必须将其分配给一个变量,然后再尝试打印它。
network = splitNet()
print network
Run Code Online (Sandbox Code Playgroud)
例如
>>> def mylist():
... myl = []
... myl.append('1')
... return myl
...
>>> my_list = mylist()
>>> my_list
['1']
>>>
Run Code Online (Sandbox Code Playgroud)