Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果函数在python中定义之前就被调用,它如何工作?_Python_Main - Fatal编程技术网

如果函数在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