本篇仅仅是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++交互的更多相关文章

  1. Python学习day09 - Python进阶(3)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  2. Python学习day05 - Python基础(3) 格式化输出和基本运算符

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  3. Python学习笔记—Python基础1 介绍、发展史、安装、基本语法

    第一周学习笔记: 一.Python介绍      1.Python的创始人为吉多·范罗苏姆.1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...

  4. python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

  5. Python学习(一) Python安装配置

    我本身是Java程序猿,听说Python很强大,所以准备学习一下Python,虽说语言都是相同的,但java跟python肯定还是有区别的.希望在此记录一下自己的学习过程. 目前,Python分2.X ...

  6. python学习: 优秀Python学习资源收集汇总--转

    Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...

  7. Python学习day07 - Python进阶(1) 内置方法

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  8. Python学习之Python简介

    Python简介 Python的由来 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象.解释型计算机程序设计语言,它是吉多·范罗苏姆(Guide van ...

  9. 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 ...

随机推荐

  1. FIM控制同步用户

     C:\Program Files\Microsoft Office Servers\15.0\Synchronization Service\UIShell 这个路径下,你如果懂FIM,可以进去看看 ...

  2. 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 ...

  3. MaxScript通过.net发送邮件

    Fn SmtpSendMail argSmtpAddress argSenderAddress argSenderPassword argTargetAddress argTitle argMessa ...

  4. ObjectARX动态添加AutoCAD传统下拉菜单入门篇(一)

    ObjectARX动态添加传统下拉菜单入门篇 图文by edata  , 转载注明出处 http://www.cnblogs.com/edata AutoCAD 添加传统下拉菜单有很多种方式,比较典型 ...

  5. canvas图像绘制过程中的注意

    特别来记录一下canvas绘制图像,要在图片加载完后,才会将其显示在canvas画布之上,否则会显示不出来:深刻体会,愣是找不到问题... var c=document.getElementById( ...

  6. linux系统解决boot空间不足

    有时候更新Linux系统是会碰到boot空间不足的错误,原因基本上是安装时boot空间设置问题可以通过删除旧的内核来释放boot空间. ubuntu: 1.查看当前使用内核版本号       unam ...

  7. TCP Server有两个套接字

     TCP服务器有一个特殊的套接字,欢迎运行在任意主机上的客户进程的某些初始接触. 三次握手期间,客户进程敲服务器的欢迎之门.该服务器"听到"敲门时,它将生成一个新的TCP套接字对 ...

  8. 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 ...

  9. Python中 '==' 与'is' 以及它们背后的故事

    摘要 比较判断逻辑是在代码中经常使用的,在Python中常用 '==' 和 is 来做比较判断. ==  :  双等号是用来比较变量所指向内存单元中的值是否相等,它只关心值,并不在意值的内存地址,也就 ...

  10. IntelliJ IDEA 2018.3(Ultimate Edition)激活方法

    本因博主Windos10系统上IDEA 2017会出现自带输入法候选框不跟随光标的问题,故更新了IntelliJ IDEA 2018,当时官方发布虽然还是Beta版本,但是迫于输入中文累死眼睛的窘态下 ...