Lecture#4
.pdfMetaprogramming templating: jinja2
Template variables
{{var}}, {{var.someattr}}, {{var[‘key’]}}
for block
{% for item in iterable %}
...
{% endfor %}
if block
{% if var%}
...
{% endif %}
Metaprogramming templating: jinja2
from jinja2 import Template
tpl = Template(“{{foo}} - {{bar}}”)
rtpl = tpl.render(foo=’First’,bar=’Second’) or
rtpl = tpl.render({‘foo’:’First’,‘bar’:’Second’})
Ok, now we can generate code at runtime. Usually, for C/CUDA code.
Metaprogramming warning
Never, ever-
trust other people’s data when using it to generate executable code.
Always assume the worst. They all want to crash your code. Always.
(google it, yeah. something like “python eval dangerous”)
Python
“With great power comes great responsibility.”
- Uncle Ben from SpiderMan
or, for those who prefer classic:
“Un grand pouvoir implique de grandes responsabilités.”
- François-Marie Arouet aka Voltaire
Questions?