调用python函数而不从编辑器

时间:2015-08-17 13:20:20

标签: python function

请原谅我所知道的一个令人难以置信的基本问题,但我一直无法自行解决。

我正在尝试将我的数据分析从Matlab切换到Python,我正在努力学习一些非常基础的东西:在Matlab中,我在编辑器中编写了一个函数,并且使用该函数我只是从它调用它命令行,或其他功能。我在matlab编辑器中编写的函数在函数定义行中给出了一个名称,通常最好使函数名与.m文件名匹配以避免混淆。

我不明白Python中的函数有何不同,因为我没有成功地在那里翻译相同的方法。

例如,如果我在Python编辑器中编写一个函数(我使用的是Python 2.7和Spyder),只需保存.py文件并从Python终端调用它的名称就不起作用了。我得到一个“函数未定义”错误。但是,如果我在Spyder的编辑器中执行该功能(使用“运行文件”按钮),不仅代码执行正确,从该功能上也可以直接从终端调用。

那么......我做错了什么?我完全理解使用Python在各方面都不会与Matlab完全相同,但似乎我想要做的事情并非不合理。我只是希望能够编写函数并从python命令行调用它们,而不必首先通过编辑器运行每个函数。我确信我在这里的错误必须非常简单,但在网上做了很多阅读并没有让我得到答案。

感谢您的任何信息!

4 个答案:

答案 0 :(得分:4)

如果要在Python中使用特定文件中定义的函数,则需要先“导入”该文件。这类似于运行该文件中的代码。 Matlab不要求你这样做,因为它搜索具有匹配名称的文件并自动为你读取代码。

例如,

myFunction.py是一个包含

的文件
def myAdd(a, b):
    return a + b

为了从Python命令行或其他文件访问此函数,我将输入

from myFunction import myAdd

然后在此会话期间我可以输入

myAdd(1, 2)

有两种使用导入的方法,请参阅here

答案 1 :(得分:0)

您需要检查{python脚本<{1}}

__main__

然后你可以像这样从终端运行你的脚本

def myFunction():
  pass

if __name__ == "__main__":
  myFunction()

此外,如果您的功能在另一个文件中,则需要将其导入

python myscript.py

答案 2 :(得分:0)

Python没有MATLAB的“每个文件一个函数”的限制。您可以在给定文件中拥有任意数量的函数,并且可以从命令行或其他函数访问所有函数。

Python也没有遵循MATLAB的做法,即总是自动地使每个可以找到的功能一直可用,这往往导致功能名称冲突(两个具有相同名称的功能)。

相反,Python使用“模块”的概念。模块只是一个文件(您的.py文件)。该文件可以包含零个或多个函数,零个或多个变量以及零个或多个类。如果您想使用该文件中的内容,只需将其导入即可。

所以说你有一个'mystuff.py'文件:

X = 1
Y = 2

def myfunc1(a, b):
   do_something

def myfunc2(c, d):
   do_something

如果您想使用它,只需输入import mystuff即可。然后,您可以访问mystuff中的任何变量或函数。要致电myfunc2,您只需mystuff.myfunc2(z, w)

基本上发生的是,当您键入import mystuff时,它只会执行文件中的代码,并使mystuff.<varname>中的所有变量都可用,其中<varname>是名称变量。与MATLAB不同,Python函数被视为与任何其他变量一样,因此可以像访问任何其他变量一样访问它们。课程也是如此。

还有其他方法可以导入,例如from mystuff import myfunc

答案 3 :(得分:-1)

您可以通过

运行python程序来运行它们
python program.py