从Python解析参数到C++

1 投票
3 回答
506 浏览
提问于 2025-04-17 03:49

我想知道如何从Python中改变C++/C程序里的参数值。
在下面的程序中,我使用牛顿-拉夫森方法来计算一个函数的根。
我想做的是把变量xn(初始猜测值)的值改成在Python界面中给定的某个值。
这个代码很简单,但我正在尝试一个更复杂的代码,在那里我需要改变一些变量的值,而不想每次都重新编译代码。

我可以写一个输入文件来避免再次编译代码,但我想要的是
更好地控制代码,比如在某个时间点暂停程序,改变变量的值,然后继续执行。
你能告诉我有没有简单的方法可以做到这一点吗?

谢谢。

#include <iostream>                                                                                                               
using namespace std;                                                                                                                

double first_derivative(double x)
{
    double dummy;
// Parabolic Function
    dummy = 2.0 * x + 7.0;
    return (dummy);
}

double second_derivative(double x)
{
    double dummy;
//Parabolic Function
    dummy = 2.0 ;
    return(dummy);
}


int main ()                                                                                                                         
{                                                                                                                                   
    double xn,fd,sd;
    int i,n;                                                                                                                        
        i=0;    
        xn=4.0 ; 

    cout << i << "    " << xn << "\n" ;

    for(i=0; i<10 ; i++) {
        fd =  first_derivative(xn);
        sd =  second_derivative(xn);
        xn = xn - fd/sd ;
        cout << i << "    " << fd << "    " << sd << "     " << xn << "\n" ;
    }
    return 0;
}

3 个回答

0

我想这应该是为了测试吧?因为“在某个时间点停止程序,修改变量的值,然后继续执行”这个做法,只有在测试的时候才有意义。

如果是这样的话,这个链接可能对你有帮助:http://sourceware.org/gdb/wiki/PythonGdb。当然,这个方法只适用于你在使用gdb的情况下。

1

一种方法是使用 Boost Python

Boost.Python 是一个 C++ 库,可以让 C++ 和 Python 这两种编程语言之间无缝对接。

听起来这正好符合你的需求。

另外,由于你的 C++ 程序不接受任何参数,你可以修改你的 main 函数,让它能够接受参数。

int main(int argc, char *argv[])

这里的 argc 是参数的数量,而 argv 是指向参数字符串的指针。你可以自己解析这些参数,或者使用类似 Boost.program_options 的工具。

然后,你可以通过 Python 的 subprocess 模块来调用这个程序。

1

如果你想让它像Python那样工作,最简单的办法就是直接用Python写。

你不能随便“改数字”来改变一个编译好的程序。不过,你可以让程序接受一些参数,然后在运行时再去修改这些参数。在C++中,你可以通过命令行参数、配置文件,或者直接询问用户输入来实现。这些方法都比涉及Python要简单。

如果因为某些原因,代码的某些部分必须用C++写,但你又特别想用Python,那你可以把C++的功能做成一个库,让Python来调用。一个常用的方法是SWIG。这样的话,你可以创建一些函数,在Python中调用它们,并传入你想要修改的参数。你的Python脚本只需要调用这些函数就可以了。

撰写回答