为什么我可以在定义之前调用一个函数,只有一个警告?

Bra*_*roy 2 python function spyder

在其他语言中,我经常这样做:

someFunc()

someFunc() {
  // This is my function
}
Run Code Online (Sandbox Code Playgroud)

这样我可以将所有函数堆叠在文件中较低的位置,但是将函数调用放在顶部.现在我对所发生的一切都有一个很好的概述.

但是,当我在Spyder的Python 3中执行此操作时,我收到了未定义名称:'myfunc'的警告

my_func("Some string")

def my_func(some_var):
  print(some_var)
Run Code Online (Sandbox Code Playgroud)

代码工作正常,但我不确定这里的最佳做法.我的方法是否会产生任何负面影响?或者它只是在你打电话之前拥有你的功能的指南?

我上面设置的代码不会为我工作.这是为什么?我正在使用Anaconda运行Python 3.4.3.我的版本有什么不同?或者是因为我在Spyder中运行它?

编辑:显然Spyder以神秘的方式工作.首先,我在定义后进行了调用,然后我将调用交换到第一行,它仍然有效.Spyder似乎缓存了功能,或者至少没有将它们清除掉.(虽然我不确定Spyder是否正在进行缓存或Python本身.我正在考虑使用Python.)对于任何想知道这一点的新手:解决方案是重新启动程序和/或Python服务.

Tig*_*kT3 5

这在标准Python构建中不起作用,因为文件是按顺序解析的.你引用的其他语言是编译的(在传统意义上,不是JIT或任何东西),所以顺序并不重要,但Python要求首先要做的事情.

定义/分配/新建/ etc.使用它们之前的事情.

  • @BramVanroy尝试重启你的翻译,也许你早先已经意外地定义了'my_func`? (3认同)
  • @spectras很明显CPython,绝大多数使用的.从快速谷歌:"CPython是最初的Python实现.它是你从Python.org下载的实现." 它可能不被称为"标准",但你肯定明白他的意思. (2认同)