重复写代码太累了,那么是否有自动帮我们写代码的东东呢?
选择一
做成公用组件
选择二
用模板生成代码
选择三
在评论里告诉我:)
在python中有模板引擎Jinja2. 不过一般看到它时都是介绍生成html模板的。
其实它是可以生成任何UTF-8的代码的。
如何生成呢?
# 代码生成器
from jinja2 import Template
# 先生成一个单词
tmpl = '{{ name }}' # 模板
tmp = Template(tmpl) # 载入模板
result = tmp.render(name='mikele') # 输入变量,生成结果
print(result) # mikele
把上面的功能定义成函数
def render(tmpl, *args, **kwds):
'''jinja2 render'''
vars = dict(*args, **kwds)
tmp = Template(tmpl)
return tmp.render(vars).strip()
生成一个列表循环
fruits = ['apple', 'banana']
tmpl_list = """
{% for fruit in fruits %}
{{ fruit }}
{% endfor %}
"""
result = render(tmpl_list, fruits=fruits)
print(result)
apple
banana
在 % 前面加个 - 可以去掉换行符
tmpl_list = """
{% for fruit in fruits -%}
{{ loop.index }}. {{ fruit }}
{% endfor %}
"""
print(render(tmpl_list, fruits=fruits))
- apple
- banana
生成一个函数
tmpl_fun = """
def {{fun}}():
pass
"""
print(render(tmpl_fun, fun='eat'))
# 结果
def eat():
pass
生成类
tmpl_class = """
class {{ model }}s:
pass
"""
print(render(tmpl_class, model='Blog'))
class Blogs:
pass
导入模块,类...
tmpl_import = """
from person import {{ models|join(', ') }}
"""
print(render(tmpl_import, models=['Teacher', 'Student']))
from person import Teacher, Student
判断
tmpl_if = """
{% if a > 2 %}{{ a }}{% else %}#小于2{% endif %}
"""
print(render(tmpl_if, a=3))
保存代码到程序里 codes.py
def save(data, filename='codes.py'):
with open(filename, 'w') as f:
f.write(data)
save(data=result)
有了这些就可以组合起来自动生成程序了。
如果变量少,可以用一个模板文件。
如果几个模板要拼在一起,就用直接像这样定义模板变量。再定义变量。
暂且介绍到这。。。
更多功能请到 Jinja2 官网查询 Jinja2模板
有什么问题可以留言,或者发我邮箱.