用 Python 在文件末尾声明函数

有没有可能在不完全定义函数的情况下调用它?当我尝试这样做的时候,我得到了一个错误: “ Function _ name没有被定义”。我来自 C + + 背景,所以这个问题难倒了我。

在工作之前声明函数:

def Kerma():
return "energy / mass"


print Kerma()

然而,尝试在不首先定义函数的情况下调用该函数会带来麻烦:

print Kerma()


def Kerma():
return "energy / mass"

In C++, you can declare a function after the call once you place its header before it.

我错过了什么吗?

121655 次浏览

This isn't possible in Python, but quite frankly you will soon find you don't need it at all. The Pythonic way to write code is to divide your program into modules that define classes and functions, and a single "main module" that imports all the others and runs.

对于简单的一次性脚本,要习惯于将“可执行部分”放在末尾,或者更好的方法是学习使用交互式 Python shell。

One way that is sort of idiomatic in Python is writing:

def main():
print Kerma()


def Kerma():
return "energy / mass"


if __name__ == '__main__':
main()

这允许您按照自己喜欢的顺序编写代码,只要在最后继续调用函数 main

Python 是一种动态编程语言,解释器总是接受变量(函数,...)的状态,就像它们在调用它们时的状态一样。您甚至可以在一些 if-block 中重新定义函数,并且每次都以不同的方式调用它们。这就是为什么你必须在调用它们之前定义它们。

当 Python 模块(。Py 文件)运行时,其中的顶级语句按其出现的顺序执行,从顶部到底部(从头到尾)。这意味着在定义之前不能引用它。例如,下面将生成显示的错误:

c = a + b  # -> NameError: name 'a' is not defined
a = 13
b = 17

Unlike with many other languages, def and class statements are executable in Python—not just declarative—so you can't reference either a or b until that happens and they're defined. This is why your first example has trouble—you're referencing the Kerma() function before its def statement has executed and body have been processed and the resulting function object bound to the function's name, so it's not defined at that point in the script.

像 C + + 这样的语言中的程序通常在运行之前进行预处理,在这个编译阶段,整个程序和它所引用的任何 #include文件都会被一次性读取和处理。与 Python 不同,这种语言具有声明性语句,允许在使用之前声明函数的名称和调用顺序(或静态类型的变量) ,这样当编译器遇到它们的名称时,它就有足够的信息来检查它们的用法,这主要涉及类型检查和类型转换,其中没有一个需要它们的实际内容或代码体已经被定义。

如果你愿意像 C + + 一样使用函数中的所有内容。您可以从文件底部调用第一个函数,如下所示:

def main():
print("I'm in main")
#calling a although it is in the bottom
a()


def b():
print("I'm in b")


def a():
print("I'm in a")
b()


main()

这样,python 首先“读取”整个文件,然后开始执行