用Python在文件末尾声明函数

2024-04-23 09:58:29 发布

您现在位置:Python中文网/ 问答频道 /正文

在没有完全定义函数的情况下调用它是可能的吗?尝试此操作时,出现错误:“函数名未定义”。我来自C++背景,所以这个问题使我感到难堪。

在工作前声明函数:

def Kerma():
        return "energy / mass"    

print Kerma()

但是,尝试在未首先定义函数的情况下调用该函数会带来麻烦:

print Kerma()

def Kerma():
    return "energy / mass"
在C++中,一旦调用了它的头,就可以在调用之后声明一个函数。

我是不是丢了什么东西?


Tags: 函数声明return定义def错误情况mass
3条回答

当运行Python模块(.py文件)时,其中的顶级语句将按它们出现的顺序从上到下(从开始到结束)执行。这意味着在定义某个东西之前,不能引用它。例如,下面将生成显示的错误:

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

与许多其他语言不同,defclass语句在Python中是可执行的,而不仅仅是声明性的,因此在发生这种情况并定义它们之前,不能引用ab。这就是为什么您的第一个示例在执行Kerma()函数的def语句并处理了body和绑定到函数名的结果函数对象之前,无法引用该函数,因此在脚本中该点未定义该函数。

<> > C++等语言程序通常在运行前进行预处理,在编译阶段,所有的程序和它所引用的任意^ {< CD7>}文件都被同时读取和处理。与Python不同,这种语言的特点是声明性语句,允许在使用之前声明函数的名称和调用序列(或静态类型的变量),这样当编译器遇到它们的名称时,它就有足够的信息来检查它们的使用,这主要包括类型检查和类型转换,它们都不需要定义它们的实际内容或代码体。

在Python中有一种惯用的方法是编写:

def main():
    print Kerma()

def Kerma():
    return "energy / mass"    

if __name__ == '__main__':
    main()

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

这在Python中是不可能的,但坦白地说,您很快就会发现根本不需要它。编写代码的Pythonic方法是将程序划分为定义类和函数的模块,以及一个导入所有其他模块并运行的“主模块”。

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

相关问题 更多 >