小編寫這篇文章,主要目的還是給大家講一下關(guān)于python代碼的相關(guān)事宜,比如怎么才能夠?qū)崿F(xiàn)自動(dòng)生產(chǎn)C++代碼,這里面還是比較的復(fù)雜的,下面小編就給大家貼出具體的代碼給大家來看下。
遇到的問題
工作中遇到這么一個(gè)事,需要寫比較多的C++的底層數(shù)據(jù)庫類,但這些類大同小異,無非是增刪改查,如果人工來寫代碼,既費(fèi)力又容易出錯(cuò);而借用python的代碼自動(dòng)生成,可以輕松搞定;
?。惐菾AVA中的Hibernate自動(dòng)生成的數(shù)據(jù)庫底層操作代碼)
下面介紹使用python字符串替換的方法;
Python字符串替換的幾種方法
1.字符串替換
將需要替換的內(nèi)容使用格式化符替代,后續(xù)補(bǔ)上替換內(nèi)容;
template="hello%s,your website is%s"%("大CC","http://blog.me115.com") print(template)
也可使用format函數(shù)完成:
template="hello{0},your website is{1}".format("大CC","http://blog.me115.com") print(template)
注:該方法適用于變量少的單行字符串替換;
2.字符串命名格式化符替換
使用命名格式化符,這樣,對(duì)于多個(gè)相同變量的引用,在后續(xù)替換只用申明一次即可;
template="hello%(name)s,your name is%(name),your website is%(message)s"%{"name":"大CC","message":"http://blog.me115.com"} print(template)
使用format函數(shù)的語法方式:
template="hello{name},your name is{name},your website is{message}".format(name="大CC",message="http://blog.me115.com") print(template)
注:適用相同變量較多的單行字符串替換;
3.模版方法替換
使用string中的Template方法;
from string import Template tempTemplate=string.Template("Hello$name,your website is$message") print(tempTemplate.substitute(name='大CC',message='http://blog.me115.com'))
有了模版方法后,就可以將模版保存到文件多帶帶編輯,在生成的地方替換為需要的變量;
示例:代碼生成
這個(gè)示例使用以上講到的第三種方法;
建立一個(gè)模版文件,里面需要替換的內(nèi)容使用${}變量替換;
dao_cpp.template
/// /// class${CLASSNAME} /// brief Redis底層接口類操作${TABLE_NAME}表 ///TABLE${TABLE_NAME_UPPER} /// author dao_cpp_generator.py /// generate date:${GENE_DATE} ///[注:本文件為自動(dòng)生成,不需要人為編輯,若有修改,請(qǐng)通過配置py腳本來重新生成.] #include"${CLASSNAME}.h" #include"include/${TABLE_NAME}_t.h" #include"RedisManager.h" #include"common/LogMacros.h" #include"common/StringUtility/OtherStringFunc.h" #include"common/DateTime.h" namespace redisdao{ #define PRIMARY_KEY"${PRIMER_KEY}" const string${CLASSNAME}::TABLE_NAME="${TABLE_NAME}"; const string${CLASSNAME}::TABLE_ID="${TABLE_ID}";//在數(shù)據(jù)庫中的表的唯一性標(biāo)識(shí)符 const string${CLASSNAME}::KEY_SEPARETER="${KEY_SEPARETER}"; ${CLASSNAME}::${CLASSNAME}(void) { if(0==m_reHandler.EnsureConnect()) m_bRedisConnected=true; else m_bRedisConnected=false; } ${CLASSNAME}::~${CLASSNAME}(void) { } int${CLASSNAME}::InsertRecord(const string&strVal) ...
python代碼生成程序:
cpp_generator.py #!/usr/bin/env python #coding=utf-8 #Redis底層操作類CPP文件生成程序(*RedisDao.cpp) #author me115 126.com 2014-7-22 import os,sys,re,traceback from datetime import datetime from string import Template class DaoCppGenerator: def generate(self): tableName='students' className='%sRedisDao'%tableName.capitalize() filePath=r'include/%s.cpp'%className class_file=open(filePath,'w') lines=[] #模版文件 template_file=open(r'dao_cpp.template','r') tmpl=Template(template_file.read()) #模版替換 lines.append(tmpl.substitute( CLASSNAME=className, TABLE_NAME=tableName, TABLE_NAME_UPPER=tableName.upper(), GENE_DATE=datetime.now().strftime('%Y-%m-%d%H:%M:%S'), TABLE_ID='115', EXPIRE_DATE='06JUN14')) #0.將生成的代碼寫入文件 class_file.writelines(lines) class_file.close() print'generate%s over.~~'%filePath
有了這個(gè)程序,再配合一堆XML配置文件,就可以輕松生成各種C++程序代碼了。
以上就是小編給大家總結(jié)的,關(guān)于python實(shí)現(xiàn)c++代碼的相關(guān)事宜了,希望可以給各位讀者帶來更多的幫助下。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/127800.html
摘要:示例代碼如下此示例中可以看出,當(dāng)?shù)鹘K止時(shí),通過拋出異常告知迭代器已耗盡。但如果迭代器所指向的數(shù)據(jù)結(jié)構(gòu)在其存在時(shí)發(fā)生了插入或刪除操作,則迭代器將可能失效。與的情形類似,對(duì)進(jìn)行任何插入操作也將損壞迭代器。 花下貓語:之前說過,我對(duì)于編程語言跟其它學(xué)科的融合非常感興趣,但我還說漏了一點(diǎn),就是我對(duì)于 Python 跟其它編程語言的對(duì)比學(xué)習(xí),也很感興趣。所以,我一直希望能聚集一些有其它語言基...
摘要:由于這個(gè)插件有式的程序返回值和運(yùn)行時(shí)間的顯示,我希望我的插件也具有這個(gè)功能。這個(gè)命令在后臺(tái)其實(shí)會(huì)做很多事情,比如設(shè)置中的版本號(hào)添加版本標(biāo)簽并提交到版本庫中??梢钥吹降谝淮翁峤徊寮陌姹咎?hào)為。 最近在學(xué)習(xí)Python,自然也安裝了Atom編輯器的一些Python插件。有一個(gè)插件名字叫做atom-python-run,作用很簡(jiǎn)單,就是按F5運(yùn)行當(dāng)前Python文件。不過這個(gè)插件有一個(gè)問題,...
摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
閱讀 1067·2023-01-14 11:38
閱讀 1062·2023-01-14 11:04
閱讀 904·2023-01-14 10:48
閱讀 2380·2023-01-14 10:34
閱讀 1147·2023-01-14 10:24
閱讀 1026·2023-01-14 10:18
閱讀 655·2023-01-14 10:09
閱讀 733·2023-01-14 10:02