2

我正在自学一点 Python 和 mathlab 编程。我需要运行我用matlab在python中编写的几个函数。

我看到了这个例子:在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 运行它,就像我首先编写的示例一样!

4

2 回答 2

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')

您的脚本没有输入,因此您不需要 MATLABsystem函数的第二个参数。确保脚本顶部有正确的shebang !

于 2013-10-09T17:24:09.363 回答
1

请注意,这random.shuffle(x)只会重新排列 list x,它不会运行或返回任何内容,因此您的脚本不会输出任何内容。如果要运行这些功能,则必须添加类似

for f in x:
    f()

到代码的末尾,这将遍历(打乱的)函数列表,然后按(随机)顺序运行每个函数。

如果您的任何功能包括print,那么您应该会看到结果。如果你不这样做,你可以尝试用你在示例中看到print的函数替换 any。sys.std.write

if __name__=='__main__'除非您想要import文件但最后运行该部分,否则您甚至不需要该行。

于 2013-10-09T18:13:36.487 回答