Home php教程 PHP开发 Embedding Python in C/C++

Embedding Python in C/C++

Nov 23, 2016 pm 01:47 PM
c/c++

Embedding Python in C/C++ is also relatively simple. First, you need to add Python’s include file directory and lib file directory in VC:
Under VC6.0, open tools->options->directories->show directories for , add the inlude directory in the Python installation directory to the include files item, and add the libs directory to the library files item.
Under VC2005, open the tools->options->Projects and Solutions->VC++ directory, and then do the same work.

The code is as follows:

//在debug下执行出错,“无法找到python31_d.lib文件”,后查到原因是:在debug下生成必须要有python31_d.lib文件,否则只能在release下生成
#include <python.h>
int main()
{
    Py_Initialize();
    PyRun_SimpleString("Print &#39;hi, python!&#39;");
    Py_Finalize();
    return 0;
}
Copy after login

The prototype of the Py_Initialize function is: void Py_Initialize(). This function must be used when embedding a Python script. It initializes the Python interpreter. This function must be called before using other Python/C APIs. You can use the Py_IsInitialized function to determine whether the initialization is successful and return True if successful.
The prototype of the PyRun_SimpleString function is int PyRun_SimpleString(const char *command), which is used to execute a piece of Python code. Note: Do you need to maintain indentation between statements?
The prototype of the Py_Finalize function is void Py_Finalize(), which is used to close the Python interpreter and release the resources occupied by the interpreter.

The PyRun_SimpleFile function can be used to run ".py" script files. The function prototype is as follows:
int PyRun_SimpleFile(FILE *fp, const char *filename);
where fp is the open file pointer and filename is the python script file to be run. name. However, since the official release of this function is compiled by visual studio 2003.NET, if other versions of the compiler are used, the FILE definition may cause a crash due to version reasons. At the same time, for the sake of simplicity, you can use the following method to replace this function:
PyRun_SimpleString("execfile('file.py')"); Conversion processing into the corresponding data type in Python (in C language, all Python types are declared as PyObject types), the function prototype is as follows:
PyObject *Py_BuildValue(const char *format, …..);
PyString_String( ) is used to convert PyObject* type variables into char* type that can be processed by C language. The specific prototype is as follows:
char* PyString_String(PyObject *p);

List operation function:

PyObject * PyList_New(Py_ssize_t len);

int PyList_SetItem(PyObject *list, Py_ssize_t index, PyObject *item);
PyObject * PyList_GetItem(PyObject *list, Py_ssize_t index);
int PyList_Append(PyObject *list, PyObject *item);
int PyList_Sort(PyObject *list); Stint pylist_reverse (pyobject *list);
py_ssize_t pylist_size (pyobject *list); Item (pyobject *p, py_ssize_t pos, pyobject *o); PyObject * PyTuple_GetItem(PyObject *p, Py_ssize_t pos);
int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize); //Note it is a ** pointer

Dictionary operation function:

PyObject * PyDict_New();

int PyDict_SetIt em(PyObject *p, PyObject *key, PyObject *val);
int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val);
PyObject* PyDict_GetItem(PyObject *p, PyObject *key);
PyObject* PyDict_GetItemString(PyObject *p, const char *key);
//Corresponds to PyDict_SetItemString

int PyDict_DelItem(PyObject *p, PyObject *key);

int PyDict_DelItemString(PyObject *p, char *key);
//Corresponds to PyDict_SetItemString
int PyDict_Next (PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue);
PyObject* PyDict_Items(PyObject *p);
PyObject* PyDict_keys(PyObject *p);
PyObject* PyDict_Values(PyObject *p);

When using Python objects in C/C++, reference counting issues should be handled correctly, otherwise it can easily lead to memory leaks. When using functions in the Python/C API to create lists, tuples, dictionaries, etc., macros such as Py_CLEAR() and Py_DECREF() should be used to destroy these objects after completing operations on them. The prototype is as follows:
void Py_CLEAR(PyObject *o);
void Py_DECREF(PyObject *o);
Among them, for the Py_CLEAR function, the parameter can be a NULL pointer, which means no operation is performed, but the Py_DECREF function cannot be a NULL pointer, otherwise it will cause mistake.

Use the PyImport_Import() function to import a Python module in C and return a module object. The function prototype is:
PyObject* PyImport_Import(PyObject *name);
PyModule_GetDict() function can obtain the function list in the Python module and return a dictionary. The key in the dictionary is the function name and the value is the calling address of the function. The prototype is as follows:
PyObject* PyModule_GetDict(PyObject *module);
Use the PyObject_CallObject() function and the PyObject_CallFunction() function to call functions in Python in C. The prototype is as follows:
PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args) ;
//args is a tuple form
PyObject* PyObject_CallFunction(PyObject *callable, char *format, ...);
//format is a parameter type similar to "iss", followed by specified parameters
You can use PyCallable_Check(func ) to determine whether the function can be called, and returns True if it can.



Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1664
14
PHP Tutorial
1267
29
C# Tutorial
1239
24
Why in C/C++, the sizeof of the structure is not equal to the sum of the sizeof of each member? Why in C/C++, the sizeof of the structure is not equal to the sum of the sizeof of each member? Aug 26, 2023 am 09:29 AM

The size of the structure type elements obtained by sizeof() is not always equal to the size of each individual member. Sometimes the compiler adds some padding to avoid alignment problems. So dimensions may change. Padding is added when a structure member is followed by a member of larger size or is at the end of the structure. Different compilers have different types of alignment constraints. In the C standard, total alignment structures are implementation dependent. Case 1 In this case, the double z is 8 bytes long, which is larger than x (4 bytes)). So another 4 bytes of padding are added. Additionally, the short type data y has 2 bytes of space in memory, so an extra 6 bytes are added as padding. Sample code #include<stdio.h>structmyS

Create a C/C++ code formatting tool using Clang tool Create a C/C++ code formatting tool using Clang tool Aug 26, 2023 pm 01:09 PM

In this tutorial, we willdiscussingaprogramtocreateaC/C++codeformattingtoolwiththehelpofclangtools.SETUPsudoaptinstallpythonsudoaptinstallclang-format-3.5 We will then create a Python file in a location where the current user has read and write permissions. Example importoscpp_extensions=(".cxx",".cpp&

What are the differences between php and c# What are the differences between php and c# Jun 02, 2023 pm 01:45 PM

The differences between php and c# are: 1. The language type system is different, PHP is dynamic, while C# is static type; 2. The platforms used are different, PHP can be cross-platform, while C# is exclusive to Windows; 3. The programming paradigm is different, PHP It supports object-oriented, procedural and functional programming, and C# is more inclined to object-oriented programming; 4. The execution speed is different, PHP is faster, and C# is relatively slow; 5. The application scenarios are different, PHP is used in web development, servers, etc. C# is used for Windows desktop and web applications.

In C/C++, there are two operations: pre-increment and post-increment. In C/C++, there are two operations: pre-increment and post-increment. Aug 25, 2023 pm 02:25 PM

Here we take a look at what are pre-increment and post-increment in C or C++. Both pre-increment and post-increment are increment operators. But there is little difference between them. The pre-increment operator first increments the value of a variable and then assigns it to other variables, but in the case of post-increment operator, it first assigns to a variable and then increments the value. Example #include<iostream>usingnamespacestd;main(){ intx,y,z; x=10; y=10;&nb

One article explains in detail vscode configuration C/C++ running environment [nanny-level teaching] One article explains in detail vscode configuration C/C++ running environment [nanny-level teaching] Feb 27, 2023 pm 07:33 PM

How to develop C/C++ in VScode? How to configure the C/C++ environment? The following article will share with you the VScode configuration C/C++ running environment tutorial (nanny-level teaching). I hope it will be helpful to you!

In C/C++, the strcpy() function is a function used to copy one string to another string In C/C++, the strcpy() function is a function used to copy one string to another string Sep 09, 2023 am 08:49 AM

The function strcpy() is a standard library function. It is used to copy one string to another string. In C language, it is declared in the "string.h" header file, while in C++ language, it is declared in the cstring header file. It returns a pointer to the destination. This is the syntax of strcpy() in C language, char*strcpy(char*dest,constchar*src); some key points of strcpy(). It copies the entire string into the target string. It replaces the entire string instead of appending it. It does not change the source string. The following is an example of strcpy() in C language: Example Online Demo#in

From C/C   to JavaScript: How It All Works From C/C to JavaScript: How It All Works Apr 14, 2025 am 12:05 AM

The shift from C/C to JavaScript requires adapting to dynamic typing, garbage collection and asynchronous programming. 1) C/C is a statically typed language that requires manual memory management, while JavaScript is dynamically typed and garbage collection is automatically processed. 2) C/C needs to be compiled into machine code, while JavaScript is an interpreted language. 3) JavaScript introduces concepts such as closures, prototype chains and Promise, which enhances flexibility and asynchronous programming capabilities.

C/C++ program to calculate the number of trailing zeros in the factorial of a number C/C++ program to calculate the number of trailing zeros in the factorial of a number Aug 29, 2023 pm 12:29 PM

Here we will see how to calculate the number of trailing zeros in the factorial result of any number. Therefore, if n=5, then 5! =120. There is only one trailing 0. For 20!, it would be 4 zeros as 20!=2432902008176640000. The simplest way is to calculate the factorial and count 0. But for larger values ​​of n, this approach fails. So we're going to take another approach. If the prime factors are 2 and 5, then trailing zeros will appear. If we calculate 2 and 5, we can get the result. To do this we will follow this rule. Trailing 0 = Counting algorithm for 5 in factorial (n) prime factors countTrailingZeros(n)begin &

See all articles