在python上使用瓶API会在将参数传递到函数时导致错误

在python上使用瓶API会在将参数传递到函数时导致错误,python,bottle,Python,Bottle,我正在使用瓶库用python编写API,但我遇到了一个问题 当我运行以下代码时: from bottle import route, run apiArray = ["key0","key1","key2"] @route('/<userApi>/') def hello(userApi,apiArray): for item in apiArray: if item == userApi: return {True} retu

我正在使用瓶库用python编写API,但我遇到了一个问题

当我运行以下代码时:

from bottle import route, run
apiArray = ["key0","key1","key2"]
@route('/<userApi>/')
def hello(userApi,apiArray):
    for item in apiArray:
        if item == userApi:
            return {True}
    return {False}
run(host='localhost', port=8080, debug=True)

有人知道我做错了什么以及为什么会出现这个错误吗?

如果它是一个已经声明的变量,为什么要传入
apiArray
??该函数接受两个变量,但该路由将只接收一个变量。去掉这个,它应该会工作。它是在上下文中的,所以不需要它,但是如果需要将它作为参数传入,则应该将它添加到路由中。否则,它将永远不会被设置

编辑:快速上下文教程

在线上有无数的资源来理解Python中的变量上下文,所以我将使用示例给出一个简明的解释

让我们从Python中上下文的解释开始。上下文(或范围)定义为变量或函数可供使用的“空间”。如果一个变量是在给定的上下文中定义的,那么以后任何其他变量或函数都可以调用它。例如:

foo = 3
print foo
这将打印
3
。然而,这将失败

print foo
foo = 3
原因是,尽管
foo
的上下文正确,但它尚未定义

关于你的问题,比如“如果变量是全局的,那么拥有一个函数有什么意义”,Python上下文的第二部分是嵌套函数继承前面的上下文。如果我这样做了:

foo = 3
def print_foo():
    print foo

print_foo()
然后将打印
3
,因为
foo
与函数处于相同的上下文中。你会在哪里使用这个

这扩展到更多的上下文嵌套。您可以在函数中包含函数,但在每个级别上,该级别及以下级别都可以使用变量


我希望这有助于您更好地理解上下文,但我过于简化并排除了许多重要的细节,因此请花时间阅读更多Python上下文教程。

为什么要将
apiArray
作为函数的参数?@BrenBarn,因为我需要函数中的数组。@BrenBarn我如何获得它数组中的数组?您将其定义为全局变量,因此它在任何地方都可用。我不确定我是否理解。可能我的代码格式不好,但是声明了apiArray,我需要在该函数中声明它。apiArray声明在函数范围之外,因此它对整个文件是全局的,您不需要将其作为参数传递。函数的参数只能是您希望从URL参数得到的参数。按照@ZekeDroid的建议,它会起作用。@cross-在python中,如果您在类或函数之外的文件中声明一个变量,那么该变量对文件中的每个函数都可用。@cross:如果您不知道答案,这不是一个愚蠢的问题。只是不管你使用Python多久了,这是一个非常普遍的概念,上下文的概念。我将编辑我的答案来解释。@BrenBarn:你完全正确。这是因为计数器是一个
范围
变量,而不是
全局
。我写得太快了,在我的脑海中有JS,其中整数是对象,所以引用会起作用。我用了一个范围界定的坏例子,所以我将删除它,因为我认为它不会给讨论增加任何内容。不过谢谢你指出这一点。
foo = 3
def print_foo():
    print foo

print_foo()