python调用c语言函数

We can call a C function from Python program using the ctypes module.

我们可以使用ctypes模块从Python程序调用C函数。

从Python调用C函数 (Calling C Function from Python)

It involves the following steps:

它涉及以下步骤:

  1. Creating a C file (.c extension) with the required functions使用所需功能创建C文件(扩展名为.c)
  2. Creating a shared library file (.so extension) using the C compiler.使用C编译器创建共享库文件(扩展名为.so)。
  3. In the Python program, create a ctypes.CDLL instance from the shared file.在Python程序中,从共享文件创建一个ctypes.CDLL实例。
  4. Finally, call the C function using the format {CDLL_instance}.{function_name}({function_parameters}).最后,使用格式{CDLL_instance}.{function_name}({function_parameters})调用C函数。

步骤1:创建具有某些功能的C文件 (Step 1: Creating a C File with some functions)

#include <stdio.h>int square(int i) {return i * i;
}

We have a simple C function that will return the square of an integer. I have saved this function code in the file named my_functions.c.

我们有一个简单的C函数,该函数将返回整数的平方。 我已将此功能代码保存在名为my_functions.c的文件中。

步骤2:创建共享库文件 (Step 2: Creating the Shared Library File)

We can use the following command to create the shared library file from the C source file.

我们可以使用以下命令从C源文件创建共享库文件。

$ cc -fPIC -shared -o my_functions.so my_functions.c

C File and Shared Library File

C文件和共享库文件

步骤3:从Python程序调用C函数 (Step 3: Calling C Function from Python Program)

>>> from ctypes import *
>>> so_file = "/Users/pankaj/my_functions.so"
>>> my_functions = CDLL(so_file)
>>>
>>> print(type(my_functions))
<class 'ctypes.CDLL'>
>>>
>>> print(my_functions.square(10))
100
>>> print(my_functions.square(8))
64
>>>

Calling C Function From Python

从Python调用C函数

If you change the C program file, you will have to regenerate the shared library file.

如果更改C程序文件,则必须重新生成共享库文件。

结论 (Conclusion)

The python default implementation is written in C programming and it’s called CPython. So it’s not very uncommon to use C functions in a python program. In this tutorial, we learned how to easily call C functions in a python program.

python默认实现是用C编程编写的,称为CPython。 因此,在python程序中使用C函数并不是很常见。 在本教程中,我们学习了如何在python程序中轻松调用C函数。

翻译自: https://www.journaldev.com/31907/calling-c-functions-from-python

python调用c语言函数

python调用c语言函数_从Python调用C函数相关推荐

  1. python是动态语言图片_利用python图片生成,需10几行代码,生成的动态表情包(小黄鸭)...

    小编找到了10几行的,好玩的动态表情包生成的代码.分享分享! 这个程序怎么做呢?不要急,来听我给大家分析分析. 工具:程序环境 语言:Python 3.6 编辑器:Pycharm 程序步骤 实现字符动 ...

  2. python第一个发行版本由c语言实现_【Python】讲真,你知道Python咋来的吗?

    Python诞生在一个圣诞节 Python诞生于1989年的一个圣诞节,其创作者Guido van Rossum为了打发圣诞节假期的无聊,便开始了Python语言的编写.Python第一个发行版本是在 ...

  3. python与c语言在语法上的区别-Python与C语言基础对比(Python快速入门)

    代码较长,建议使用电脑阅读本文. 10分钟入门Python 本文中使用的是Python3 如果你曾经学过C语言,阅读此文,相信你能迅速发现这两种语言的异同,达到快速入门的目的.下面将开始介绍它们的异同 ...

  4. python是c语言写的吗-python是c语言开发的吗

    python是c语言开发的吗? python是c语言开发的. Python是完全面向对象的语言.函数.模块.数字.字符串都是对象.并且完全支持继承.重载.派生.多重继承,有益于增强源代码的复用性.Py ...

  5. C语言试题三十三之比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。

    1. 题目 请编写函数function,它的功能是:比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串.若两个字符串长度相同,则返回第一个字符串. 2 .温馨提示 ...

  6. 25.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字 符串。

    25.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串.若两个字符串长度相同,则返回第一个字 符串. 例如,输入:beijing ...

  7. python中如何调用函数_我写了一个函数,如何在python中调用

    匿名用户 1级 2015-03-06 回答 Python的特色简单 Python是一种代表简单主义思想的语言.阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Pyth ...

  8. python一个函数调用另一个函数_在Python中将函数作为另一个函数的参数传入并调用的方法...

    在Python中,函数本身也是对象,所以可以将函数作为参数传入另一函数并进行调用 在旧版本中,可以使用apply(function, *args, **kwargs)进行调用,但是在新版本中已经移除, ...

  9. python调用matlab函数_从python调用MATLAB函数

    我知道这是一个老问题,已经得到答复. 但是我一直在寻找相同的东西(对于Mac),发现有很多选择与matlab交互的方法和成熟度不同. 这是我发现的: pymat 使用matlab引擎(libeng)进 ...

最新文章

  1. windows服务器下部署多台tomcat
  2. Bitmap的使用(三)
  3. Laravel 中 Controller访问Model函数/常量
  4. linux查看主机端口进程命令
  5. PYPL 4 月排行:Python 最流行,Java 还行不行?
  6. [css] 元素竖向的百分比设置是相对容器的高度吗?
  7. cmd 调用JLink.exe 下载程序
  8. C# Tostring 格式化输出字符串全解
  9. linux维护rpm 数据库,Linux运维知识之linux rpm命令详细介绍
  10. Lync 客户端功能对比之IM功能
  11. php生成站点地图,php生成百度站点地图sitemap.xml
  12. Android Picasso教程
  13. Patternodes 3 for Mac(创建图形矢量模式工具)
  14. cbv、resful、APIView和序列化组件
  15. java 图片水印旋转,Java实现 图片水印或者文字水印详解
  16. 拉格朗日插值的优缺点_如何直观地理解拉格朗日插值法?
  17. 廊坊金彩教育:店铺运营技巧思路
  18. 用c++设计 公司职工的信息管理程序 求大神!!
  19. 2013年 雷诺 Renault Zoe | 警告信息 “停车: 电力故障危险”
  20. Python爬虫系列之爬取微信公众号新闻数据

热门文章

  1. js-JavaScript高级程序设计学习笔记2
  2. jquery mobile将页面内容当成弹框进行显示
  3. C++ 内存分配 学习笔记
  4. [转载] Python与其他语言结合的参数转换函数PyArg_ParseTuple()
  5. [转载] java 中 date类型详解
  6. webuploader
  7. IIS出现 分析器错误消息: 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的...
  8. Java知多少(84)图形界面之布局设计
  9. 微软职位内部推荐-Software Engineer
  10. DevExpress XtraGrid网格控件示例四:初始化新建行的单元格