总结:Python学习 和 Python与C/C++交互
本篇仅仅是Python的学习和Python和C++数据对接过程中的一些总结。
由于工作的需要,用一周的时间学习 Python。
Python是基于C实现的一门解释型语言,由于其易用性,俘获了不少开发者和运维的心。据说,Python 在科学计算领域,逐步吞噬着古老语言 Fortran的份额。这门语言是Google的第二语言,国内的知乎,豆瓣,都使用纯Python开发。Python的官方网站:http://www/python.org.
为了逐步完善的我们服务,我们需要为客户提供更多,更好,更安全便捷的服务。在已有服务基础上,为了满足某些互联网客户的需要,我们需要提供公司产品的Python驱动。
因为客户需求的紧迫性,和我们的优势,在进行一个周的数据对接调研和测试之后,我和我的搭档决定使用已经稳定的C++驱动,用Python写一个表现层,底层通过wrapper和C++接口进行对接,然后通过C++与数据库服务交互。这能不仅为我们节省不少开发时间,而且将重点放在了Python与C++之间数据对接上,而不是通过纯Python直接和数据库服务进行交互。
C++ 驱动已经是进过严格测试的产品模块,通过Python对所提供的接口进行再一次的封装,使之对客户透明。而Python的简单易用和与C/C++无缝交互的天生属性,可以为客户提供更方便的服务。
Python简单得令人发指,可以不用关心对象的回收问题(当然,在C++这一层,必须关系对象的生命周期),可以返回多个对象,语法更接近自然语言。然而,简单的背后,是语言开发维护者辛勤的付出。
一下,对近期写Python驱动的一些总结:
1、在Python中,一切都是对象,就连None也是对象。
2、@classmethod是一个属性,它的调用,需要提供cls参数,是类方法,未加任何属性说明的函数,需要提供self参数,是实例方法。classmethod的声明,可以通过在函数定义前添加@classmethod 关键字声明。
3、python语言没有提供单独的int64,或者long long 类型,因为long已经足够。但是在传递到C++这层的时候,需要int64或者long long类型参数,则需要用Python传入PyLong的对象,然后通过PyLong_AsLongLong进行转换。
4、在C++层,不能直接返回的NULL,需要转换成Py_None,否则会抛出 SystemError 异常。
5、在C/C++中,需要对各种类型,进行转换才能返回给Python使用,因为Python的一切都是对象。关键接口是 Python.h中的 Py_BuildValue。你可以根据需要,返回一个或多个返回值。
6、还有不少,总之,python给我带来了很多方便的地方。
当然,一门语言被用的火热的时候,少不了别人骂。我也栽到过不少坑:
1、著名的缩进问题,因为在linux环境下,用vim写代码,由于缩进的问题,一个错误,让我找了好久。
2、Python的GC是基于引用计数的,在Python这层,可以肆无忌惮的使用,但是到了C/C++这层,对于引用Python传递下来的对象,需要主动使用Py_XINCREF 和 Py_XDECREF来增加和减少引用计数,不得不吐槽,在Python和C/C++交互的时候,Python的引用计数显得很鸡肋。引用计数问题,我更愿意封装一个smart_ptr来实现,而不是每次引用的时候,还去自己写一行语句去增加和减少引用。例如在C++返回Py_None的时候,你需要先去Py_XINCREF(Py_None),然后返回Py_None。
3、没有提供enum等原型,在众多错误码中,我不得不写一个class去实现形如const的值系列。
经过一个月的调研,开发,测试,我觉得我对Python有了一定的认识,曾经叨叨想学而一直没有好好学的语言,在工作的压力下,一个周就搞定。
在工作的基础上,成长的速度,要比自己业余东看看西学学快得多。
接着上月的汇编语言定位,查找内存出错等core问题之后,本月又学习了更深一层:通过汇编及栈桢,逆向定位和排查因为栈溢出导致寄存器数据被冲导致的程序崩溃。
=====>THE END<=====
总结:Python学习 和 Python与C/C++交互的更多相关文章
- Python学习day09 - Python进阶(3)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习day05 - Python基础(3) 格式化输出和基本运算符
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习笔记—Python基础1 介绍、发展史、安装、基本语法
第一周学习笔记: 一.Python介绍 1.Python的创始人为吉多·范罗苏姆.1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...
- python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
- Python学习(一) Python安装配置
我本身是Java程序猿,听说Python很强大,所以准备学习一下Python,虽说语言都是相同的,但java跟python肯定还是有区别的.希望在此记录一下自己的学习过程. 目前,Python分2.X ...
- python学习: 优秀Python学习资源收集汇总--转
Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...
- Python学习day07 - Python进阶(1) 内置方法
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习之Python简介
Python简介 Python的由来 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象.解释型计算机程序设计语言,它是吉多·范罗苏姆(Guide van ...
- python学习之python安装
1.下载python源码包 wget https://www.python.org/ftp/python/3.5.5/Python-3.5.5.tar.xz 2.下载 xz yum -y insta ...
随机推荐
- FIM控制同步用户
C:\Program Files\Microsoft Office Servers\15.0\Synchronization Service\UIShell 这个路径下,你如果懂FIM,可以进去看看 ...
- Let it crash philosophy for distributed systems
This past weekend I read Joe Armstrong’s paper on the history of Erlang. Now, HOPL papers in general ...
- MaxScript通过.net发送邮件
Fn SmtpSendMail argSmtpAddress argSenderAddress argSenderPassword argTargetAddress argTitle argMessa ...
- ObjectARX动态添加AutoCAD传统下拉菜单入门篇(一)
ObjectARX动态添加传统下拉菜单入门篇 图文by edata , 转载注明出处 http://www.cnblogs.com/edata AutoCAD 添加传统下拉菜单有很多种方式,比较典型 ...
- canvas图像绘制过程中的注意
特别来记录一下canvas绘制图像,要在图片加载完后,才会将其显示在canvas画布之上,否则会显示不出来:深刻体会,愣是找不到问题... var c=document.getElementById( ...
- linux系统解决boot空间不足
有时候更新Linux系统是会碰到boot空间不足的错误,原因基本上是安装时boot空间设置问题可以通过删除旧的内核来释放boot空间. ubuntu: 1.查看当前使用内核版本号 unam ...
- TCP Server有两个套接字
 TCP服务器有一个特殊的套接字,欢迎运行在任意主机上的客户进程的某些初始接触. 三次握手期间,客户进程敲服务器的欢迎之门.该服务器"听到"敲门时,它将生成一个新的TCP套接字对 ...
- PHP错误——Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)
解释是可用内存已耗尽,这关系到PHP的memory_limit的设置问题. 这里有两种方法解决 1.修改php.ini memory_limit = 128 打开终端输入下列bash命令 cd /pr ...
- Python中 '==' 与'is' 以及它们背后的故事
摘要 比较判断逻辑是在代码中经常使用的,在Python中常用 '==' 和 is 来做比较判断. == : 双等号是用来比较变量所指向内存单元中的值是否相等,它只关心值,并不在意值的内存地址,也就 ...
- IntelliJ IDEA 2018.3(Ultimate Edition)激活方法
本因博主Windos10系统上IDEA 2017会出现自带输入法候选框不跟随光标的问题,故更新了IntelliJ IDEA 2018,当时官方发布虽然还是Beta版本,但是迫于输入中文累死眼睛的窘态下 ...