C语言和Python一起混合编程可以吗?今天带大家看看

Python这几年在众多编程语言排行直线上升,成为全球最受欢迎在编程语言了,但C也要古老编程语言了,记得上大一就学C了,C语言和Python一起混合编程可以吗?C语言是编程语言的祖母吗,但是随着一代一代的编程语言长大,所以祖母也是会拍在沙滩上的,很多小小伙伴应该都会学过或者了解C语言,因为软件系的会教嘛,但是Python我想很多人都没学过,具体连他是啥都不知道吧!

从上述代码可以窥见Python内部运行的方式:

所有Python元素,module、function、tuple、string等等,实际上都是PyObject。C语言里操纵它们,一律使用PyObject *。

Python的类型与C语言类型可以相互转换。Python类型XXX转换为C语言类型YYY要使用PyXXXAsYYY函数;C类型YYY转换为Python类型XXX要使用PyXXXFromYYY函数。

也可以创建Python类型的变量,使用PyXXX_New可以创建类型为XXX的变量。

若a是Tuple,则a[i] = b对应于 PyTupleSetItem(a,i,b),有理由相信还有一个函数PyTupleGetItem完成取得某一项的值。

不仅Python语言很优雅,Python的库函数API也非常优雅。

现在我们得到了一个C语言的函数了,可以写一个main测试它

编译的方式就用本节开头使用的方法。

在Linux/Mac OSX运行此示例之前,可能先需要设置环境变量:

bash:

csh:

2 Python 调用 C/C++(基础篇)

这种做法称为Python扩展。

本部分参考资料

《Python源码剖析-深度探索动态语言核心技术》是系统介绍CPython实现以及运行原理的优秀教程。

Python 官方文档的这一章详细介绍了C/C++与Python的双向互动Extending and Embedding the Python Interpreter _ _

下面我分享python 简单爬取维基百科程序语言消息盒例子

在分享之前小编还是要推荐自己建立的裙Python学习:

五七七九零一二九四 这里有推荐的学习路线,基础视频学习资料和电子教程文档和Python安装工具及Python技术学习交流和分享,下面是项目实现的代码:

# coding=utf-8

import urllib

import time

import re

#第一步 获取维基百科内容

#http://zh.wikipedia.org/wiki/程序设计语言列表

keyname="程序设计语言列表"

temp='http://zh.wikipedia.org/wiki/'+str(keyname)

content = urllib.urlopen(temp).read()

open('wikipedia.html','w+').write(content)

print 'Start Crawling pages!!!'

#第二步 获取网页中的所有URL

#从原文中"0-9"到"参看"之间是A-Z各个语言的URL

start=content.find(r'0-9')

end=content.find(r'参看')

cutcontent=content[start:end]

link_list = re.findall(r"(?

fileurl=open('test.txt','w')

for url in link_list:

#字符串包含wiki或/w/index.php则正确url 否则A-Z

if url.find('wiki')>=0 or url.find('index.php')>=0:

fileurl.write(url+'\n')

#print url

num=num+1

fileurl.close()

print 'URL Successed! ',num,' urls.'

#第三步 下载每个程序URL静态文件并获取Infobox对应table信息

#国家:http://zh.wikipedia.org/wiki/阿布哈茲

#语言:http://zh.wikipedia.org/wiki/ActionScript

info=open('infobox.txt','w')

info.write('****************获取程序语言信息*************\n\n')

j=1

for url in link_list:

if url.find('wiki')>=0 or url.find('index.php')>=0:

#下载静态html

print wikiurl

language = urllib.urlopen(wikiurl).read()

name=str(j)+' language.html'

#注意 需要创建一个country的文件夹 否则总报错No such file or directory

open(r'language/'+name,'w+').write(language) #写方式打开+没有即创建

#获取title信息

title_pat=r'(?).*?(?=)'

title_ex=re.compile(title_pat,re.M|re.S)

title_obj=re.search(title_ex, language) #language对应当前语言HTML所有内容

title=title_obj.group()

#获取内容'C语言 - 维基百科,自由的百科全书' 仅获取语言名

middle=title.find(r'-')

info.write('【程序语言 '+title[:middle]+'】\n')

print title[:middle]

#第四步 获取Infobox的内容

#标准方法是通过确认其内容,找与它最近的一个结束符号

#但此处分析源码后取巧

实现

start=language.find(r'

end=language.find(r'

'+title[:middle-1]) #减去1个空格

infobox=language[start:end]

#print infobox

#第五步 获取table中属性-属性值

if "infobox vevent" in language: #防止无Infobox输出多余换行

#获取table中tr值

res_tr = r'(.*?)'

m_tr = re.findall(res_tr,infobox,re.S|re.M)

for line in m_tr:

#print unicode(line,'utf-8')

#获取表格第一列th 属性

res_th = r'(.*?)'

m_th = re.findall(res_th,line,re.S|re.M)

for mm in m_th:

#如果获取加粗的th中含超链接则处理

if "href" in mm:

restr = r'

(.*?)

'

h = re.findall(restr,mm,re.S|re.M)

print unicode(h[0],'utf-8')

info.write(h[0]+'\n')

else:

#报错用str()不行 针对两个类型相同的变量

#TypeError: coercing to Unicode: need string or buffer, list found

print unicode(mm,'utf-8') #unicode防止乱

info.write(mm+'\n')

#获取表格第二列td 属性值

res_td = r'(.*?)'

m_td = re.findall(res_td,line,re.S|re.M)

for nn in m_td:

if "href" in nn:

#处理超链接

res_value = r'(.*?)'

m_value = re.findall(res_value,nn,re.S|re.M) #m_td会出现TypeError: expected string or buffer

for value in m_value:

print unicode(value,'utf-8'),

info.write(value+' ')

print ' ' #换行

info.write('\n')

else:

print unicode(nn,'utf-8')

info.write(nn+'\n')

print '\n'

info.write('\n\n')

else:

print 'No Infobox\n'

info.write('No Infobox\n\n\n')

#设置下载数量

j=j+1

time.sleep(1)

if j==40:

break;

else:

print 'Error url!!!'

else:

print 'Download over!!!'

好了,今天就分享到这里,有想学习Python编程的伙伴们,欢迎留言和小编交流学习,最后祝大家早日成为Python大牛!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180122A07VIO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励