我在python和mathlab中教自己一些编程。我需要运行我在python中使用matlab编写的一些函数。
我看到了这个例子: 在python中
import sys
def squared():
y=x*x
return y
if __name__ == '__main__':
x = float(sys.argv[1])
sys.stdout.write(str(squared(x)))
然后在matlab
[status,result]=system('nameofthescrip', 3)
status=0
result=9.0
但是,我不知道当我尝试使用我的功能时它不起作用。
我的程序是这样的:
def function_1():
Shows something on screen
return
def function_2():
hear a sound
return
def function_3():
write a number and press a key
return
x=[function_1,funciotion_2,function_3]
random.shuffle(x)
但后来我不知道该怎么做
if __name__ == '__main__':
x = float(sys.argv[1])
sys.stdout.write(str(squared(x)))
所以我可以从matlab运行它,就像我先写的例子一样!
答案 0 :(得分:1)
在您给出的示例中,代码
if __name__ == '__main__':
x = float(sys.argv[1])
sys.stdout.write(str(squared(x)))
运行脚本时运行,请参阅此SO answer。在您的情况下,运行脚本时要运行的代码是
x=[function_1,function_2,function_3]
random.shuffle(x)
所以你应该把那些代码放在if块中:
if __name__ == '__main':
x=[function_1,function_2,function_3]
random.shuffle(x)
然后在MATLAB中,您可以以类似的方式调用Python:
[status,result]=system('nameofthescript')
您的脚本没有输入,因此您不需要MATLAB system
函数的第二个参数。确保脚本顶部有正确的shebang!
答案 1 :(得分:1)
请注意,random.shuffle(x)
只会重新排列列表x
,它不会运行或返回任何内容,因此您的脚本不会输出任何内容。如果要运行这些功能,则必须添加类似
for f in x:
f()
到代码的末尾,这将遍历(混乱)函数列表,然后以该(随机)顺序运行每个函数。
如果您的任何功能包含print
,那么您应该会看到结果。如果不这样做,您可以尝试使用示例中显示的print
函数替换任何sys.std.write
。
您甚至不需要if __name__=='__main__'
行,除非您想要import
您的文件,但不在最后运行该部分。