practical - Y a-t-il un Python équivalent à l'interpolation de Ruby?




practical python and opencv pdf (6)

Depuis Python 2.6.X, vous pouvez utiliser:

"my {0} string: {1}".format("cool", "Hello there!")

https://code.i-harness.com

Ruby exemple:

name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."

La concaténation de chaîne Python réussie est apparemment verbeuse pour moi.


J'ai développé le paquet interpy , qui permet l'interpolation de chaîne en Python .

Installez-le simplement via l' pip install interpy . Et puis, ajoutez la ligne # coding: interpy au début de vos fichiers!

Exemple:

#!/usr/bin/env python
# coding: interpy

name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n#{name}."

L'interpolation de chaîne va être incluse avec Python 3.6 comme spécifié dans PEP 498 . Vous pourrez faire ceci:

name = 'Spongebob Squarepants'
print(f'Who lives in a Pineapple under the sea? \n{name}')

Notez que je déteste Spongebob, écrire ceci était légèrement douloureux. :)


Pour le vieux Python (testé sur 2.4), la solution supérieure pointe le chemin. Tu peux le faire:

import string

def try_interp():
    d = 1
    f = 1.1
    s = "s"
    print string.Template("d: $d f: $f s: $s").substitute(**locals())

try_interp()

Et vous obtenez

d: 1 f: 1.1 s: s


import inspect
def s(template, **kwargs):
    "Usage: s(string, **locals())"
    if not kwargs:
        frame = inspect.currentframe()
        try:
            kwargs = frame.f_back.f_locals
        finally:
            del frame
        if not kwargs:
            kwargs = globals()
    return template.format(**kwargs)

Usage:

a = 123
s('{a}', locals()) # print '123'
s('{a}') # it is equal to the above statement: print '123'
s('{b}') # raise an KeyError: b variable not found

PS: la performance peut être un problème. Ceci est utile pour les scripts locaux, pas pour les journaux de production.

Dupliqué:





language-comparisons