python中的return语句

Min*_* Le 1 python return

我试图编写一个程序,但遇到了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)

我之前写过另一个程序做同样的事情,一切正常,所以我不确定这里有什么问题?

Nat*_*ord 5

你的问题在这里:

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语句可以有效地复制粘贴到调用它们的位置.