在函数外使用变量

Ant*_*man 1 python python-3.x

我已经定义了一个函数,它将从用户输入中获取一个值。这是一个路径(基于 appJar 的 .directoryBox)。我已将目录框的代码放在一个函数中弹出,以便在按下按钮时显示。但是,我似乎无法在函数之外使用该值。

代码的重要部分如下所示:

def dirfunction(button):
    dirr = app.directoryBox('box')
    app.setEntry('Directory', dirr)
    app.showButton('Search')
    return dirr

def searchfunction(button):
    if button == 'Search':
        findBigfile.findBigFiles(dirr, mbSize)


mbSize = app.addLabelEntry('Size in MB')
app.addLabelEntry('Directory')
app.setLabelWidth('Size in MB', '10')
app.setLabelWidth('Directory', '10')

app.addButton('Choose Directory', dirfunction)
app.addButton('Search', searchfunction)
app.hideButton('Search')

app.go()
Run Code Online (Sandbox Code Playgroud)

我尝试在 dirfunction 之外使用 'dirr' 变量,但我无法让它工作。它只在内部有效。

编辑:我也不能在函数之外创建 app.directoryBox,因为这会导致在打开应用程序时直接出现弹出窗口。

ini*_*goD 5

dirr 是一个局部变量,它只能在定义的上下文中看到(在你的情况下在函数 dirfunction 内部,它不存在于它之外)。

为了能够看到外面,你必须在外面声明。

dirr = None
Run Code Online (Sandbox Code Playgroud)

之后,从函数内部访问它,在python 2中它是通过使用全局来完成的:

def method():
    global dirr # you have to declare that you'll use global variable 'dirr'
    dirr = "whatever"
Run Code Online (Sandbox Code Playgroud)

现在:

print `dirr` 
Run Code Online (Sandbox Code Playgroud)

将打印:

whatever
Run Code Online (Sandbox Code Playgroud)

  • 可能值得阅读[为什么全局变量是邪恶的](/sf/ask/1341083761/)以供将来参考...... (2认同)