如果函数在python中定义之前就被调用,它如何工作?
我想知道如果函数在python中定义之前就被调用,它如何工作?,python,main,Python,Main,我想知道如果uuuu name_uuuu==“uuuu main_uuuuuu”:在python中真正做了什么,我在python3中有以下代码: def main(): test(); def test(): print("hello world " + __name__); if __name__ == "__main__": main(); 我们知道我们必须在使用函数之前声明它,因此部分内部的函数调用如果工作正常,main()在if语句内部调用之前定义,但是te
如果uuuu name_uuuu==“uuuu main_uuuuuu”:
在python中真正做了什么,我在python3中有以下代码:
def main():
test();
def test():
print("hello world " + __name__);
if __name__ == "__main__":
main();
我们知道我们必须在使用函数之前声明它,因此部分内部的函数调用如果工作正常,main()
在if
语句内部调用之前定义,但是test()函数呢,它是在调用之后定义的,没有错误:
def main():
test();
def test():
print("hello world " + __name__);
那么,如果调用函数后定义了test()
函数,该函数将如何工作呢?Python按照它看到的顺序执行代码
您键入def main():
它将其作为稍后运行的函数定义
如果uuuu name_uuuu==“uuuu main_uuuu”:
检查当前文件是否应该运行(与包含的文件相反)。在这种情况下,它将执行下面的内容(通常是main
)
你可以这样写:
print "here"
def main():
print "in main"
if __name__ == "__main__"
main()
您应该看到这样的输出
here
in main
这是因为python本质上是一种脚本语言,函数是可选的。
也就是说,对于任何不打算在接下来的10分钟内扔掉的代码,您都应该使用函数和类。它们使代码更易于理解、遵循和调试
您的特定代码工作(在main之后定义了测试)的原因是您在定义了所有内容之后运行它。除非运行main,否则Python不会尝试检查是否要调用测试。运行main
时,已经定义了test
Python按照看到代码的顺序执行代码
您键入def main():
它将其作为稍后运行的函数定义
如果uuuu name_uuuu==“uuuu main_uuuu”:
检查当前文件是否应该运行(与包含的文件相反)。在这种情况下,它将执行下面的内容(通常是main
)
你可以这样写:
print "here"
def main():
print "in main"
if __name__ == "__main__"
main()
您应该看到这样的输出
here
in main
这是因为python本质上是一种脚本语言,函数是可选的。
也就是说,对于任何不打算在接下来的10分钟内扔掉的代码,您都应该使用函数和类。它们使代码更易于理解、遵循和调试
您的特定代码工作(在main之后定义了测试)的原因是您在定义了所有内容之后运行它。除非运行main,否则Python不会尝试检查是否要调用测试。运行main
时,已经定义了test
测试在调用后未定义。命令如下:
定义main
。这引用了一个(尚未定义的)测试
,但没有实际使用(调用)它。Python对此没有问题
定义测试
调用main
main
调用test
。没问题,因为它已经定义好了
调用后,测试未定义。命令如下:
定义main
。这引用了一个(尚未定义的)测试
,但没有实际使用(调用)它。Python对此没有问题
定义测试
调用main
main
调用test
。没问题,因为它已经定义好了
这里的问题实际上与没有任何关系,如果
。考虑下面的代码:
def do_something():
do_something_else()
以上是有效的函数声明。即使我还没有写做点别的()
。请在您的交互式解释器中尝试一下。现在,当我实际调用做点什么()
:
做点什么
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
---->做某事
做某事
1 def do_something():
---->做点别的
3.
NameError:未定义全局名称“do\u something\u other”
它出错了。如果在调用do\u something()
之前的任何时候,我已经定义了我的do\u something\u else
函数,那就不会发生这种情况
那么,这意味着什么?Python确实从上到下进行解释。但是,当到达函数定义时,它只编译函数,而不执行它。这里的问题实际上与无关,如果
。考虑下面的代码:
def do_something():
do_something_else()
以上是有效的函数声明。即使我还没有写做点别的()
。请在您的交互式解释器中尝试一下。现在,当我实际调用做点什么()
:
做点什么
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
---->做某事
做某事
1 def do_something():
---->做点别的
3.
NameError:未定义全局名称“do\u something\u other”
它出错了。如果在调用do\u something()
之前的任何时候,我已经定义了我的do\u something\u else
函数,那就不会发生这种情况
那么,这意味着什么?Python确实从上到下进行解释。但是当到达函数定义时,它只编译函数,而不执行它
我们知道在使用函数之前必须声明它
听起来你来自C语言家族。这些语言在两个方面是不同的
首先,Python不“声明”任何东西。这在像C这样的语言中是有意义的,在C语言中,变量是类型化的内存位置,值存储在其中。但在Python中,值有其自身的特性
void bar() { foo(); }
void foo();
def bar():
foo()
def foo():
pass