Search code examples
pythonrubylanguage-comparisonsstring-interpolation

What is the Python equivalent of embedding an expression in a string? (ie. "#{expr}" in Ruby)


In Python, I'd like to create a string block with embedded expressions.
In Ruby, the code looks like this:

def get_val
  100
end

def testcode
s=<<EOS

This is a sample string that references a variable whose value is: #{get_val}
Incrementing the value: #{get_val + 1}

EOS
  puts s
end

testcode

Solution

  • Update: since Python 3.6, there are formatted string literals (f-strings) which enable a literal string interpolation: f"..{get_val()+1}..."


    If you need more than just a simple string formatting provided by str.format() and % then templet module could be used to insert Python expressions:

    from templet import stringfunction
    
    def get_val():
        return 100
    
    @stringfunction
    def testcode(get_val):
        """
        This is a sample string
        that references a function whose value is: ${ get_val() }
        Incrementing the value: ${ get_val() + 1 }
        """
    
    print(testcode(get_val))
    

    Output

    This is a sample string
    that references a function whose value is: 100
    Incrementing the value: 101
    

    Python Templating with @stringfunction.