python 自动生成代码 生成 python html java 等 code 把字符串当做代码执行

307 篇文章 3 订阅

jinja2 enumerate
默认从 1 开始

>>> from jinja2 import Template

>>> s = "{% for element in elements %}{{loop.index}} {% endfor %}"
>>> Template(s).render(elements=["a", "b", "c", "d"])
1 2 3 4

In addition to loop.index, there is also

loop.index0 (index starting at 0)
loop.revindex (reverse index; ending at 1)
loop.revindex0 (reverse index; ending at 0)
Even more at http://jinja.pocoo.org/docs/templates/.

https://stackoverflow.com/questions/12145434/how-to-output-loop-counter-in-python-jinja-template

python 把字符串当做代码执行

list_string = '[1, 2, 3, 4, 5]'  # 要执行的Python列表字符串

result = eval(list_string)  # 执行Python列表字符串并返回结果

print(result)  # 输出结果

请注意,使用eval()函数来执行字符串中的代码存在一定的安全风险,特别是当字符串来自不可信的来源时。因此,应该谨慎使用并确保代码字符串的来源可信。

另外,为了避免潜在的安全问题和代码执行风险,也可以考虑使用更安全的方法来解析和执行字符串,例如使用ast.literal_eval()函数。ast.literal_eval()函数用于将字符串转换为Python字面值表达式的值,其中包括列表、字典、字符串等。它提供了更严格的语法解析,并且不会执行任意的代码。

以下是使用ast.literal_eval()的示例:

import ast

list_string = '[1, 2, 3, 4, 5]'  # 要执行的Python列表字符串

result = ast.literal_eval(list_string)  # 解析字符串并返回结果

print(result)  # 输出结果

模板引擎的使用场景非常广泛,可以用于自动生成代码、邮件模板、网页模板、报告生成等。比如在 Web 开发中,可以使用模板引擎来动态生成 HTML 页面,从而实现数据与展示的分离,提高代码的可维护性和可扩展性。在机器学习领域,可以使用模板引擎来自动生成文档、报告和代码等,提高工作效率。另外,模板引擎还可以用于数据处理和数据分析等领域,例如数据报表的生成等。

使用 Jinja2 模板引擎生成 Python 代码的例子,根据模板中的变量和逻辑生成一个计算器的类:

from jinja2 import Template


class Calculator:
    def __init__(self):
        self.result = 0

    def add(self, num):
        self.result += num

    def subtract(self, num):
        self.result -= num

    def multiply(self, num):
        self.result *= num

    def divide(self, num):
        self.result /= num

    def reset(self):
        self.result = 0

template = Template("""
class {{ class_name }}:
    def __init__(self):
        self.result = 0

    {% for op in operations %}
    def {{ op.name }}(self, num):
        {% if op.operator == '+' %}
        self.result += num
        {% elif op.operator == '-' %}
        self.result -= num
        {% elif op.operator == '*' %}
        self.result *= num
        {% elif op.operator == '/' %}
        self.result /= num
        {% endif %}
    {% endfor %}

    def reset(self):
        self.result = 0
""")

operations = [
    {'name': 'add', 'operator': '+'},
    {'name': 'subtract', 'operator': '-'},
    {'name': 'multiply', 'operator': '*'},
    {'name': 'divide', 'operator': '/'},
]

class_name = 'MyCalculator'
generated_code = template.render(class_name=class_name, operations=operations)
print(generated_code)

输出的代码

class MyCalculator:
    def __init__(self):
        self.result = 0


    def add(self, num):
        self.result += num
    

    def subtract(self, num):
        self.result -= num
    

    def multiply(self, num):
        self.result *= num
    

    def divide(self, num):
        self.result /= num
    

    def reset(self):
        self.result = 0

生成 html 代码

from jinja2 import Template

# 1. 创建 HTML 模板
html_template = Template("""
<!DOCTYPE html>
<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ heading }}</h1>
    <p>{{ body }}</p>
</body>
</html>
""")

# 2. 加载 HTML 模板

# 3. 定义要传递给模板的动态数据
data = {
    "title": "Welcome to my website",
    "heading": "Hello World!",
    "body": "This is a sample paragraph."
}

# 4. 将动态数据注入到模板中的占位符中
html_output = html_template.render(data)

# 5. 输出生成的 HTML
print(html_output)

生成java代码
在模板中,{% %} 表示控制语句,如 for 循环和 if 判断等。

from jinja2 import Template

template_str = """
public class {{ class_name }} {
    {% for attribute in attributes %}
    private {{ attribute.type }} {{ attribute.name }};
    {% endfor %}

    {% for method in methods %}
    public {{ method.return_type }} {{ method.name }}() {
        return this.{{ method.name }};
    }
    {% endfor %}
}
"""
data = {
    "class_name": "Person",
    "attributes": [
        {"name": "name", "type": "String"},
        {"name": "age", "type": "int"},
    ],
    "methods": [
        {"name": "getName", "return_type": "String"},
        {"name": "getAge", "return_type": "int"},
    ],
}

template = Template(template_str)
java_code = template.render(data)

print(java_code)

生成的 java 代码
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值