当前位置: 首页 > 面试题库 >

我们可以在Python中使用C代码吗?

孟和玉
2023-03-14
问题内容

我知道Python提供了API,因此您可以在C代码中调用Python解释器,但是我想要的却是相反的。

我的程序需要使用一些C API,所以代码必须用C编写。但是我也想用Python打包程序。这意味着我想在Python中调用这些C函数或可执行文件。那可能吗?

如果我希望C代码成为一个库,这意味着我将它与Python
#include中的*.o可能的链接一起使用,该怎么做?那可能吗?如果我将C代码写入可执行文件,这意味着它成为命令,是否可以直接在Python中调用它?

另外,我听说可以编译Python代码,这是否意味着我们可以在没有源文件的情况下执行代码?输出文件是二进制文件吗?它会提高性能吗?


问题答案:

我想在python中调用这些C函数或可执行文件。那可能吗。

是的,您可以编写可以作为模块导入到Python中的C代码。Python调用这些 扩展模块
。您可以直接从Python调用它,例如文档中的示例:

Python代码

import example
result = example.do_something()

C代码

static PyObject * example(PyObject *self)
{
    // do something
    return Py_BuildValue("i", result);
}

如果我想让C代码成为一个库,这意味着我将它与#include以及* .o的链接一起使用,很可能在python中使用,怎么做或有可能。

您可以将其构建为共享库 .dll* 或 .so,* 还可以研究使用distutils分发模块。

如果我将C代码写入可执行文件,这意味着它成为命令,是否可以直接在python中调用它?

如果您编写一个 * .exe,
那么您将执行相反的操作(从C调用Python)。选择的方法(exe与共享库)取决于您是否要使用
“带有某些Python的C程序”“带有某些C的Python程序”

另外,我听说可以编译python代码,这是否意味着我们可以在没有源文件的情况下执行代码?输出文件是二进制文件吗?它会提高性能吗?

运行时,Python读取 .py* 文件并编译为 .pyc 字节码 文件。然后,字节码在Python虚拟机中运行。这意味着
“第二次执行同一文件的速度更快,因为可以避免从源代码到字节码的重新编译。” (来自Python词汇表)因此,如果您尚未编辑
.py*
文件,它将运行
.pyc 。您可以分发 ** .pyc** 文件,而不分发 .py**
文件,但是这些文件未加密,可以进行反向工程。



 类似资料:
  • 我正处于使用SoapUI Pro学习Groovy的初始阶段。所以我开始在Groovy TestStep编辑器中编写简单的脚本,如下所示 当我通过单击SoapUI Pro中的“Run”按钮来执行此脚本时,它会抛出以下错误消息。 错误: nit.java:544AntlrParserPorg.codehaus.groovy.control.CSTIntoAST(AntlrParserPnit.comp

  • 问题内容: 我想将node js用作react native项目中的后端。 问题答案: 是的,您 可以 通过正确使用Big Rich的ReactNativify 来 使用为Node编写的包。但是要考虑一些事项: 1)我遵循在问题清单中找到的建议,并分为两部分: Transformers.js(在和中调用): babel-transformer.js(也在): 2)如您在上面的代码中所见,我还演示了

  • 本文向大家介绍我们可以在Java中使用throw语句后编写任何代码吗?,包括了我们可以在Java中使用throw语句后编写任何代码吗?的使用技巧和注意事项,需要的朋友参考一下 不,我们不能在throw 语句后放置任何代码,这会导致编译时错误Unreachable Statement。 Java中的Throw关键字 的关键字throw用于手动抛出异常。 每当需要根据用户定义的逻辑错误或条件挂起功能执

  • 当我要遍历a-z时,我可以使用: 但是里面的原理是什么?为什么我们可以计算char而不需要转移到int来计算?

  • 本文向大家介绍我们可以在MySQL中使用ORDER BY NULL吗?,包括了我们可以在MySQL中使用ORDER BY NULL吗?的使用技巧和注意事项,需要的朋友参考一下 是的,我们可以做到 注–在MySQL 5.7之前,ORDER BY NULL很有用,但在MySQL 8.0中,例如,最后不需要指定ORDER BY NULL以抑制隐式排序。 让我们首先创建一个表- 使用插入命令在表中插入一些

  • 问题内容: 我知道Java代码可以通过JNI调用C 代码。但是,是否可以通过JNI或其他方法再次从C 调用Java代码? 问题答案: 是的,您当然可以。这是一个例子: 这是java文件: 还有一些使用它的C ++: