c可以调用python吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c可以调用python吗相关的知识,希望对你有一定的参考价值。

参考技术A 可以的。

C中内嵌Python
新建立一个工程,首先需要将工作目录设置到Python-3.1.1PCbuild中,以获取到动态库,至于静态库的包含,Include目录的指定,那自然也是少不了的。文件中需要包含Python.h文件,这也是必须的。
接口中
Py_Initialize();
Py_Finalize();

其他的根据需求,再引入相应的python builder 即可
参考技术B C语言中是可以调用python程序的,常用方法如下:
1、共享库

使用C语言编译产生共享库,然后python使用ctype库里的cdll来打开共享库。
2、subprocess
C语言设计一个完整的可执行文件,然后python通过subprocess来执行该可执行文件,本质上是fork+execve。
3、C语言中运行python程序
C语言使用popen/system或者直接以系统调用级fork+exec来运行python程序也是一种混编的手段了。
4、Python对C语言扩展的支持
python的C语言扩展中涉及到python的数据结构与C语言的对应,扩展方法其实是用C语言编写一个共享库,只是这个共享库中的接口是一个规范的,可以被python识别的。

python函数可以调用具有相同名称的全局函数吗?

我可以从具有相同名称的函数调用全局函数吗?

例如:

def sorted(services):
    return {sorted}(services, key=lambda s: s.sortkey())

通过{sorted}我的意思是全局排序函数。有没有办法做到这一点?然后我想用模块名称调用我的函数:service.sorted(services)

我想使用相同的名称,因为它与全局函数的作用相同,只是它添加了一个默认参数。

答案

Python的名称解析方案有时被称为LEGB规则,暗示当您在函数内使用非限定名称时,Python最多搜索四个范围 - 首先是本地(L)范围,然后是任何封闭的本地范围(E )defs和lambdas,然后是全局(G)范围,最后是内置(B)范围。 (请注意,它会在找到匹配后立即停止搜索)

因此,当您在函数内部使用sorted时,解释器会将其视为全局名称(您的函数名称),因此您将拥有递归函数。如果你想访问内置的sorted,你需要为Python指定。通过__builtin__模块(在Python-2.x中)和builtins在Python-3.x中(此模块提供对Python的所有“内置”标识符的直接访问)


python 2:

import __builtin__
def sorted(services):
    return __builtin__.sorted(services, key=lambda s: s.sortkey())

python 3:

import builtins
def sorted(services):
    return builtins.sorted(services, key=lambda s: s.sortkey())
另一答案

在定义具有相同名称的新功能之前,请存储原始功能参考。

original_sorted = sorted

def sorted(services):
    return original_sorted(services, key=lambda s: s.sortkey())

对于像sorted这样的内置函数,你可以使用__builtin__ module访问函数(在Python 3.x,builtins module中):

import __builtin__

def sorted(services):
    return __builtin__.sorted(services, key=lambda s: s.sortkey())

但是,不建议使用哪种阴影内置功能。如果可能,请选择其他名称

以上是关于c可以调用python吗的主要内容,如果未能解决你的问题,请参考以下文章

为什么python @property getter方法为每次调用运行两次,我可以阻止吗?

我可以在 python 中访问 c​​++ 或 Java 函数吗

EXE执行文件如何调用DLL?

我现在想把自己写的python模块源代码封装成dll,然后在别的python脚本里调用,可以吗?

c语言中,在一个自定义函数里面只能调用一个自定义函数吗?可以调用多个吗?如果可以怎么调用?

如何在 MicroPython 中从 C 调用 python 函数