On Fri, Mar 23, 2018 at 7:37 PM, Malcolm Greene <[email protected]> wrote:
> My original post reformatted for text mode:
>
> Looking for advice on how to expand f-string literal strings whose values I'm
> reading from a configuration file vs hard coding into
> my script as statements. I'm using f-strings as a very simple template
> language.
>
> I'm currently using the following technique to expand these f-strings. Is
> there a better way?
They're not a simple template language; they're a special form of
expression. If you want something you can read from a config file,
look instead at str.format().
# Just an ordinary string at this point, and can be read from a file or anything
product_description_template = "{product_sku} : {product_name}:
${discounted_price}"
# Need to pre-calculate any compound values
discounted_price = product_price * discount
print(product_description_template.format(**locals()))
You can't execute arbitrary code this way, but that's generally a
_good_ thing. If you really want a templating language that can
execute arbitrary code, the best way is to actually make your
templating language BE code; for instance, you can make your config
file be a Python script that creates a bunch of functions, or use
exec/eval directly (though I still wouldn't recommend the latter if
you call this in any sort of tight loop; eval and exec are not cheap,
so it's a lot more efficient to compile once).
ChrisA
--
https://mail.python.org/mailman/listinfo/python-list