当它已经在另一个def中声明时,我必须两次声明一个变量吗?

时间:2015-04-11 15:08:18

标签: python variables function

我在python中进行算术测验。在测验开始时,它询问用户他们想要输入结果的类,这是在def classname()中。测验结束后,如果用户不想重复测验,程序会将分数写入文本文件:

def classname():
    class_name = input("Which class do you wish to input results for?")
    #  the rest of my code for my introduction 
    #
    #
    #
    #
def askquestion():
    # all of my code to ask the user the arithmetic question
    #
    #
    #
    # code to ask the user if they want to repeat the quiz
    #if they dont want to repeat the quiz then this code is run
    else:
        filename = class_name + ".txt"
        # code that will write the scores to a text file

当我运行此代码时,我收到此错误:

   filename = class_name + ".txt"
 NameError: name 'class_name' is not defined

我是否必须声明变量" classname"再次在askquestion()或者有没有一种方法python可以识别我已经声明了变量?

3 个答案:

答案 0 :(得分:1)

除非您将变量定义为全局变量,否则您必须重新定义它,或者将代码中的值作为参数传递给后续函数。

您可以将参数传递给askquestion,因为它目前的情况是,变量class_name超出了函数的范围。

因此,您的函数定义更改为

def askquestion(class_name):
    ...
    ...

现在,当您调用askquestion函数时,您必须将class_name传递给它。


一个工作示例如下所示:

def classname():
    class_name = input("Which class do you wish to input results for?")
    ...
    ...
    return class_name

def askquestion(class_name):
    ...
    else:
        filename = class_name + ".txt"
        # code that will write the scores to a text file

if __name__ == `__main__`:
    class_name = classname()
    askquestion(class_name)

答案 1 :(得分:0)

您的代码在class_name()函数中声明了变量class_name,因此无法在外部访问它。如果您在class_name函数之外声明变量class_name(),则askquestion()函数可以访问该变量。

答案 2 :(得分:0)

在函数内声明的变量是该函数的本地变量,需要传递或返回到其他方法,或者移出函数以使其全局化,在函数内部使用时需要显式声明:

所以你可以从classname()返回class_name并在askquestion()中使用classname():

def classname():
    class_name = input("Which class do you wish to input results for?")
    return class_name

def askquestion():
    ...
    else:
        filename = classname() + ".txt"
        # code that will write the scores to a text file