代码之家  ›  专栏  ›  技术社区  ›  Milister

HTML文件中的Python变量[重复]

  •  0
  • Milister  · 技术社区  · 6 年前

    Ruby示例:

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

    成功的python字符串连接对我来说似乎很冗长。

    0 回复  |  直到 8 年前
        1
  •  394
  •   Sven Marnach    8 年前

    python 3.6将添加 literal string interpolation 类似于ruby的字符串插值。从python的那个版本(计划在2016年底发布)开始,您将能够在“f-strings”中包含表达式,例如

    name = "Spongebob Squarepants"
    print(f"Who lives in a Pineapple under the sea? {name}.")
    

    在3.6之前,最接近的是

    name = "Spongebob Squarepants"
    print("Who lives in a Pineapple under the sea? %(name)s." % locals())
    

    这个 % 运算符可用于 string interpolation 在蟒蛇中。第一个操作数是要被插值的字符串,第二个操作数可以有不同的类型,包括一个“映射”,将字段名称映射到要被插值的值。这里我使用了局部变量字典 locals() 映射字段名 name 作为局部变量的值。

    使用相同的代码 .format() 最新python版本的方法如下:

    name = "Spongebob Squarepants"
    print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))
    

    还有 string.Template 班级:

    tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
    print(tmpl.substitute(name="Spongebob Squarepants"))
    
        2
  •  138
  •   Nathan Hinchey    7 年前

    由于Python2.6.x,您可能需要使用:

    "my {0} string: {1}".format("cool", "Hello there!")
    
        3
  •  32
  •   Syrus Akbary Nieto    11 年前

    我已经开发了 interpy 包裹,那个 在python中启用字符串插值 .

    只需通过 pip install interpy . 然后,添加行 # coding: interpy 在你文件的开头!

    例子:

    #!/usr/bin/env python
    # coding: interpy
    
    name = "Spongebob Squarepants"
    print "Who lives in a Pineapple under the sea? \n#{name}."
    
        4
  •  26
  •   bbonamin    12 年前

    python的字符串插值类似于c的printf()

    如果你尝试:

    name = "SpongeBob Squarepants"
    print "Who lives in a Pineapple under the sea? %s" % name
    

    标签 %s 将替换为 name 变量。您应该查看打印功能标签: http://docs.python.org/library/functions.html

        5
  •  26
  •   kirbyfan64sos    8 年前

    字符串插值将是 included with Python 3.6 as specified in PEP 498 . 你将能够做到:

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

    注意我讨厌海绵宝宝,所以写这篇文章有点痛苦。:)

        6
  •  4
  •   Quan To    9 年前

    你也可以吃这个

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

    http://docs.python.org/2/library/string.html#formatstrings

        7
  •  3
  •   Community Dan Abramov    7 年前
    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)
    

    用途:

    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
    

    注:性能可能有问题。这对于本地脚本非常有用,而不是生产日志。

    复制:

        8
  •  2
  •   Michael Fox    8 年前

    对于旧的python(在2.4上进行了测试),顶级解决方案指明了方向。你可以这样做:

    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()
    

    你得到

    d: 1 f: 1.1 s: s
    
        9
  •  0
  •   Alejandro Silva    5 年前

    Python3.6及更新版本具有 literal string interpolation 使用F字符串:

    name='world'
    print(f"Hello {name}!")