请原谅我所知道的一个令人难以置信的基本问题,但我一直无法自行解决。
我正在尝试将我的数据分析从Matlab切换到Python,我正在努力学习一些非常基础的东西:在Matlab中,我在编辑器中编写了一个函数,并且使用该函数我只是从它调用它命令行,或其他功能。我在matlab编辑器中编写的函数在函数定义行中给出了一个名称,通常最好使函数名与.m文件名匹配以避免混淆。
我不明白Python中的函数有何不同,因为我没有成功地在那里翻译相同的方法。
例如,如果我在Python编辑器中编写一个函数(我使用的是Python 2.7和Spyder),只需保存.py文件并从Python终端调用它的名称就不起作用了。我得到一个“函数未定义”错误。但是,如果我在Spyder的编辑器中执行该功能(使用“运行文件”按钮),不仅代码执行正确,从该功能上也可以直接从终端调用。
那么......我做错了什么?我完全理解使用Python在各方面都不会与Matlab完全相同,但似乎我想要做的事情并非不合理。我只是希望能够编写函数并从python命令行调用它们,而不必首先通过编辑器运行每个函数。我确信我在这里的错误必须非常简单,但在网上做了很多阅读并没有让我得到答案。
感谢您的任何信息!
答案 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