zoukankan      html  css  js  c++  java
  • python之字符串中插入变量

    方法一:也是 比较好用的,功能教齐全

    s="{name} is {sex}"
    print(s.format(name="zzy",sex="girl"))   # zzy is girl
    如果要被替换的变量能在变量域中找到, 那么你可以结合使用 format_map() 和 vars()
    vars()找到所有局部变量
    name="zxc"
    sex="boy"
    print(s.format_map(vars()))    # zxc is boy
    vars() 还有一个有意思的特性就是它也适用于对象实例。
    class Info:
        def __init__(self,name,sex):
            self.name=name
            self.sex=sex
    
    a=Info("zzz","beautiful")
    print(s.format_map(vars(a)))   # zzz is beautiful

    缺陷:format 和 format_map() 的一个缺陷就是它们并不能很好的处理变量缺失的情况

    s = "{name} is {sex}"
    print(s.format(name='Guido'))
    报错:
    """
    Traceback (most recent call last):
      File "/home/zzy/PycharmProjects/MyTest/littleTest.py", line 301, in <module>
        print(s.format(name='Guido'))
    KeyError: 'sex'
    """

    解决:

    我们把参数sex 手动清除

    s = "{name} is {sex}"
    name = "zxc"
    class safesub(dict):
        """防止key找不到"""
    
        def __missing__(self, key):
            return '{' + key + '}'
    
    
    print(s.format_map(safesub(vars())))  # zxc is {sex}
    # 映射或者字典类中鲜为人知的 __missing__() 方法可以让你定义如何处理缺失的值。 在 SafeSub 类中,这个方法被定义为对缺失的值返回一个占位符。 你可以发现缺失的值会出现在结果字符串中(在调试的时候可能很有用),而不是产生一个 KeyError 异常
    如果你发现自己在代码中频繁的执行这些步骤,你可以将变量替换步骤用一个工具函数封装起来。就像下面这样:
    import sys
    
    
    def sub(text):
        return text.format_map(safesub(sys._getframe(1).f_locals))
    
    print(sys._getframe().f_locals)
    print(sub(s))   # zxc is {sex}
    
    
    #注释:1:,sub() 函数使用 sys._getframe(1) 返回调用者的栈帧。可以从中访问属性 f_locals 来获得局部变量

    方法二: 实现功能的还有一种方法,就是模板字符串,但是教之format_map var 就low一些了,,也是没法处理变量缺失问题使用 format() 方法还有一个好处就是你可以获得对字符串格式化的所有支持(对齐,填充,数字格式化等待)

    import string
    n=24
    s = string.Template('$name has $n messages.')
    print(s.substitute(vars()))   # zxc has 24 messages.
     
  • 相关阅读:
    haproxy 2.5 发布
    cube.js sql 支持简单说明
    基于graalvm 开发一个cube.js jdbc driver 的思路
    apache kyuubi Frontend 支持mysql 协议
    oceanbase 资源池删除说明
    基于obd 的oceanbase 扩容说明
    jfilter一个方便的spring rest 响应过滤扩展
    cube.js schema 定义多datasource 说明
    typescript 编写自定义定义文件
    meow 辅助开发cli 应用的工具
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/10451934.html
Copyright © 2011-2022 走看看