我试图编写一个程序,但遇到了return语句的问题.
以下代码行引发了一条错误消息,指出该变量names
未定义.
但是,我确实使用return语句返回names
并将其传递给main函数:
def main(names):
names_in()
print(names)
# import the record, put it into a list, pass that list to main().
def names_in():
infile = open('names.txt','r')
names = infile.readlines()
infile.close()
index = 0
while index < len(names):
names[index] = names[index].rstrip('\n')
index += 1
return names
main(names)
Run Code Online (Sandbox Code Playgroud)
我之前写过另一个程序做同样的事情,一切正常,所以我不确定这里有什么问题?
你的问题在这里:
main(names)
Run Code Online (Sandbox Code Playgroud)
您正在main
使用尚未定义的变量名调用您的函数.你得到的错误应该显示一个指向这一行的行号:这将验证这是问题所在.
# 'names' is not defined in this scope
def main(names):
# Some code
# 'names' is a variable that is 'in scope' here because it's passed as an 'argument'
# 'names' is not defined in this scope either
# import the record, put it into a list, pass that list to main().
def names_in():
infile = open('names.txt','r')
names = infile.readlines() # defines 'names' for this scope
# more code
return names # because 'names' is defined it can return it
# 'names' is no longer defined in this scope
main(names) # This fails because when the compiler tries to resolve 'names' it can't find anything
Run Code Online (Sandbox Code Playgroud)
根据您显然要做的事情,您需要修改您的main
功能,如下所示:
def main():
print(names_in())
Run Code Online (Sandbox Code Playgroud)
并称之为:
main()
Run Code Online (Sandbox Code Playgroud)
请注意,您似乎对代码的执行方式存在一些困惑.如果我写:
def a():
print("a")
def b():
print("b")
print("c")
b()
a()
Run Code Online (Sandbox Code Playgroud)
它被翻译成相当于:
print("c")
print("b")
print("a")
Run Code Online (Sandbox Code Playgroud)
这些def
语句可以有效地复制粘贴到调用它们的位置.