相关文章推荐
绅士的蚂蚁  ·  一文读懂异常检测 LOF ...·  2 周前    · 
难过的春卷  ·  Cannot add merged ...·  2 周前    · 
年轻有为的双杠  ·  npm ERR! gyp ERR! ...·  2 周前    · 
活泼的椰子  ·  self.tk.call(_flatten( ...·  1 周前    · 
安静的黄豆  ·  Java ...·  2 月前    · 
闷骚的黑框眼镜  ·  如何查看github ...·  9 月前    · 
可爱的蟠桃  ·  Mysql中concat()、concat_ ...·  1 年前    · 
有胆有识的楼房  ·  DATA_LOCK_WAITS | ...·  1 年前    · 

为什么需要自动生成代码

在游戏公司我发现一个问题,存在大量相似的代码,而公司主程处理这些相似代码的办法则是编写自己的代码生成工具来自动生成这些代码,因为编写相似的代码不仅耗时,还不能保证每个人编写的代码格式是否标准,所以在这里使用代码生成工具能提升效率的同时,让程序员更加的专注与逻辑部分的编辑。

那选择什么方式来生成代码呢

我公司里的两位主程分别采用了不同的方法,首先项目老大使用的时 正则表达式 来进行代码替换,但是我在使用这个的时候发现,正则确实不好用,对于一些程序员编写代码不规范,正则在这里就无法识别了(当然除非你使用正则特别牛逼),提示替换就会出错,对于替换出错我是深有体会的(改的蛋疼)。后来另一个主程大佬说用个这方法不是很好,采用 模板的方法 来处理这些比较好。之后大佬真的采用模板方法来做了个自动生成读取xml配置文件的工具,当时我是一万个敬佩。所以我到网上查阅了下模板方法替换的方式生成代码。

下面我来编写一个简单的模板,自己创建一个文件,并修改文件名及后缀,文件名为:“default.tmpl”,其中使用${}的方式来获取外部传进来的数据。

#ifndef __${CLASSNAME}_H__
#define __${CLASSNAME}_H__
#include <map>
class C${Class_Name}
public:
    C${Class_Name}() {}
    ~C${Class_Name}() {}
public:
    struct ${En_name}_struct 
    public:
        ${En_name}_struct() : m_${Name}(0) {}
        ${Type} m_${Name};
private:
    std::map<${Type}, ${En_name}_struct> m_${En_name}_cfg;
#endif

编写python代码

我问了下大佬,他是用go语言编写的exe,但是我对go不大了解,想着采用python来编写。
文件名:”build.py”

#! /usr/bin/env python
#coding=utf-8
from string import Template
class BuildData:
    def Init(self):
        filePath = './default.h'
        class_file = open(filePath, 'w')
        mycode = []
        # 加载模板文件
        template_file = open('default.tmpl', 'r')
        tmpl = Template(template_file.read())
        # 模板替换
        mycode.append(tmpl.substitute(
            CLASSNAME = 'DEFAULT',
            Class_Name = 'Default',
            En_name = 'mystruct',
            Type = 'int',
            Name = 'value'))
        # 将代码写入文件
        class_file.writelines(mycode)
        class_file.close()
        print('ok')
if __name__ == '__main__':
    build = BuildData()
    build.Init()

执行上面的python文件,会在本路径下生成一个”default.h”的头文件,我们来看看我这里生成的代码

#ifndef __DEFAULT_H__
#define __DEFAULT_H__
#include <map>
class CDefault
public:
    CDefault() {}
    ~CDefault() {}
public:
    struct mystruct_struct 
    public:
        mystruct_struct() : m_value(0) {}
        int m_value;
private:
    std::map<int, mystruct_struct> m_mystruct_cfg;
#endif

到这里我的简单的代码生成器就实现了,可以根据这类方法编写自己的生成器,像大佬那样自动生成读取xml的配置文件的话,则可以在python里先读取xml里面的数据(当然少不了的是对每一个xml表都非常了解),在赋值到里面去,我这里为了方便起见直接用了静态数据。一点多了该睡觉了!

为什么需要自动生成代码在游戏公司我发现一个问题,存在大量相似的代码,而公司主程处理这些相似代码的办法则是编写自己的代码生成工具来自动生成这些代码,因为编写相似的代码不仅耗时,还不能保证每个人编写的代码格式是否标准,所以在这里使用代码生成工具能提升效率的同时,让程序员更加的专注与逻辑部分的编辑。那选择什么方式来生成代码呢我公司里的两位主程分别采用了不同的方法,首先项目老大使用的时正则... Python, robotframework,docker,自动化测试,的学习笔记和demo。大部分代码代用py3.6+,部分老代码采用py2.7 AutomationTest 自动化测试相关,包括httprunner框架,postman自动化脚本,python requests包例子 DockerDemo 使用docker做自动化测试的demo Python-algorithms python实现基本算法 PythonAutomationTool Python自动化工具 python challenge python练习 PythonMathProblem python PythonProgram 基于python的一些框架 PythonTutorial python基本语法 RobotFrameworkBasic RobotFramework基本语法和demo Python学习进阶路线 列表,字典,推导式 迭代器和生成器 学习map、reduce、filter等函数,函数式编程 老的代码生成器的地址:https://www.cnblogs.com/skyme/archive/2011/12/22/2297592.html 以下是大家推荐的最近很火爆的代码生成器神器。如果有更好的希望大家多多留言,我会及时补充上去。 -------------------------更新补充--------------------------------- import cfile as C hello = C . cfile ( 'hello.c' ) hello . code . append ( C . sysinclude ( 'stdio.h' )) hello . code . append ( C . blank ()) hello . code . append ( C . function ( 'main' , 'int' ,). add_param ( C . variable ( 'argc' , 'int' )). add_param ( C . variable ( 'argv' , 'char' , pointer = 2 ))) body = C . block ( innerIndent = 3 ) body . append ( C . statemen
为了应付某些情况,需要做17份记录。虽然不很重要,但是17份完全雷同也不很好。大体看了一下,此记录大致分为四段。于是决定每段提供四种选项,每段四选一,拼凑成四段文字,存成一个文件。文件名就叫“XX记录+日期”。应急的随手创作,使用了“文件操作”和“生成随机数”的功能。比较简陋。后期扩展可以考虑搭配个数据库。 复制代码 代码如下: # -*- coding: cp936 -*- import random title=’XXX周例会\n会议时间: ‘ timelist=[‘6月6日’,’6月13日’,’6月20日’,’6月27日’,’7月4日’,’7月11日’,’7月18日’,’7月25日’,
转载自https://jingyan.baidu.com/article/eae07827a75ca01fed54855d.html 1.打开ArcMap软件,在其工具栏中选择点击“添加数据”工具图标,将要处理的图层添加到视图区域内; 2.在左侧内容列表中,右键选择该数据图层,在弹出的菜单中选择“打开属性表”,弹出要素层的属性表; 3.在要素属性表格中,选择左上角的“表选项“——“添加字段”菜单项...
如果您有任何疑问,请给我一个。 如果您喜欢用leetcode解决问题,请与我联系以一起享受它! (笔记: :locked: 表示您需要从Leetcode购买一本书才能解决问题) :memo: 最长回文子串 Python :memo: 之字形转换 Python :memo: Python :memo: 字符串到整数 Python Python :memo: 正则表达式匹配 Python :memo:
### 回答1: Python 代码笔记是对 Python 程序代码的解释和说明。它可以帮助你理解代码工作原理,并在以后更好地维护和编写代码。常用的代码笔记格式有注释、文档字符串等。示例代码: ```python # 计算平方 def square(x): 返回x的平方 return x*x print(square(4)) 在上面的代码中,`# 计算平方`是注释,`"""返回x的平方"""`是文档字符串。 ### 回答2: Python代码笔记是程序员在学习和实践Python编程语言时记录的一种文档。它包括通过编写实际的Python代码示例来记录各种语法、函数、模块、库和算法的用法和应用。 Python代码笔记通常用于记录和整理编程语言的基本知识,并用代码示例来演示这些知识的具体使用。因为Python语言本身较为简洁易读,因此在代码笔记中使用Python语言编写示例代码非常方便。 通过编写Python代码笔记,程序员可以更好地理解和掌握Python编程语言的特性和用法。而且代码笔记还可以作为程序员的参考资料,帮助他们在遇到问题时快速找到解决方案并进行复用。 除了记录基本知识之外,Python代码笔记还可以用于记录程序员在实际项目中遇到的问题和解决方案。通过记录这些问题和解决方案,程序员可以在未来的项目中预防和避免相同的问题,并且能够提高自己的编程技巧和经验。 总之,Python代码笔记是程序员学习和实践Python编程语言时记录的一种文档。它可以帮助程序员整理知识、提高编程技巧,并成为他们解决问题和提高效率的有力工具。 ### 回答3: Python代码笔记是程序员在学习和使用Python语言时记录的一种方式。它可以包括以下内容: 首先,Python代码笔记通常会记录Python代码的基本语法和用法。这些笔记会列举Python的关键字、变量类型、运算符、控制流语句等基本知识点,以便在需要的时候进行快速查阅和复习。 其次,Python代码笔记还会记录一些常用的Python库和模块的使用方法。Python具有丰富的第三方库和模块,如numpy、pandas、matplotlib等,这些库在数据处理、科学计算、绘图等领域都有广泛的应用。通过记录库和模块的使用方法,可以帮助程序员实现特定的功能或解决具体的问题。 此外,Python代码笔记还会记录一些常见的编程技巧和经验。比如如何提高代码的效率、如何优化算法、如何进行调试等等。这些技巧和经验是程序员在实际开发中积累的宝贵资料,可以帮助他们更好地解决问题和提高工作效率。 最后,Python代码笔记还可以记录一些项目示例和实践经验。当程序员在开发具体的项目时,他们会遇到各种问题和挑战,记录下来的项目示例和实践经验可以为他们以后的开发工作提供参考和借鉴。这些实践经验可以包括项目的架构设计、数据库操作、接口调用等方面的知识。 综上所述,Python代码笔记是程序员学习和使用Python语言的重要辅助工具,它通过记录基本语法、常用库和模块的使用、编程技巧和经验以及项目示例和实践经验等内容,帮助程序员提高开发效率,解决问题,并不断提升自己的编程能力。
weixin_43964601: 我们现在有了位图,那么接下来还需要添加Toolbar,依旧是在资源视图上右键MyButton->添加->资源->单击Toolbar->右边选择新建 第四步找不到啊 C++桌面显示恶搞 毕左二少: 运行不了报错 C++11之atomic原子操作 菜到家了疯: 我一开始在 linux环境下运行楼主的源码报错了,但是在win32上运行就没有问题这是为什么? C++11之atomic原子操作 Mr.Zhang: 会快些,具体值我没测过,毕竟封装后的东西性能肯定是有损耗的