在定义之前使用函数

时间:2021-06-07 15:09:03

标签: python

我知道脚本中函数的顺序无关紧要。但是,此示例代码不起作用:

main.py

_FUNCTIONS = (_foo, _bar) 

def myfunc():
    for f in _FUNCTIONS:
        print(f())

def _foo():
    return False

def _bar():
    return True

myfunc()

提供以下错误

File "main.py", line 1, in <module>
    _FUNCTIONS = (_foo, _bar) 
NameError: name '_foo' is not defined

但是,如果我不使用 _FUNCTIONS 并将 (_foo, _bar) 注入代码中,这将起作用:

def myfunc():
    for f in (_foo, _bar):
        print(f())

def _foo():
    return False

def _bar():
    return True

myfunc()

为什么第一个例子不起作用?

如何提取变量中的函数列表并将其放在脚本的顶部?

1 个答案:

答案 0 :(得分:2)

其实你误会了, 当您使用 _FUNCTIONS = (_foo, _bar) 时,python 期望 _foo_bar 作为变量在这里没什么特别的,并且由于您还没有定义对它的任何引用,它是未定义的,因此会引发错误。

在第二种情况下,你在函数内部做同样的事情,到那时,该函数已经在 python 的作用域中可用,因此没有错误。

正如 @khelwood 在评论中提到的那样,顺序很重要