返回语句不工作python 3

时间:2015-05-09 17:15:31

标签: python return

这段代码的想法是,用户按下第一个按钮并输入他们想要的内容,然后按下第二个按钮并将其打印出来。有人可以告诉我为什么我的退货声明不起作用?它说'变量'没有定义。提前感谢您花时间阅读我的问题。

from tkinter import*

def fun():
    variable = input('Enter Here:')
    return variable


def fun_2():
    print(variable)


window = Tk()
button = Button(text = 'Button', command = fun )
button2 = Button(text = 'Button2', command = fun_2 )
button.pack()
button2.pack()


window.mainloop()

3 个答案:

答案 0 :(得分:2)

fun()可能会返回一个值,但是Tkinter按钮不会执行具有该返回值的任何内容。

请注意,我使用短语返回值,而不是返回变量return语句传回表达式的,而不是variable变量。因此,variable变量不会成为其他函数可以访问的全局变量。

在这里,您可以将variable设为全局,并告诉fun设置全局:

variable = 'No value set just yet'

def fun():
    global variable
    variable = input('Enter Here:')

由于您确实使用了fun2variable中的任何作业,因此现在已经将其设置为全局,现在它将成功打印variable的值,因为它现在可以找到那个名字。

答案 1 :(得分:2)

在python中,当你在函数内部创建一个变量时,它只在该函数中定义。因此其他功能将无法看到它。

在这种情况下,您可能希望在对象中有一些共享状态。类似的东西:

class MyClass:
  def fun(self):
    self.variable = input('Enter Here:')

  def fun_2(self):
    print(self.variable)

mc = MyClass()

window = Tk()
button = Button(text = 'Button', command = mc.fun )
button2 = Button(text = 'Button2', command = mc.fun_2 )
button.pack()
button2.pack()

答案 2 :(得分:0)

问题出在fun2()中。它不会将variable作为输入参数。

def fun_2(variable):
     print(variable)

但请注意,您必须使用适当的参数调用fun_2。此外,正如现在的功能一样,如果您只是在其中进行打印,那么使用该功能几乎没有意义。

带走消息:变量在Python中不是全局变量,因此您必须将它传递给想要使用它的每个函数。