美文网首页
python学习笔记之--字符串格式化的几种方法

python学习笔记之--字符串格式化的几种方法

作者: itsenlin | 来源:发表于2022-01-17 20:41 被阅读0次

    占位符

    python语言提供了print内建函数,可以用来打印运行过程中的一些信息,是比较简单原始的调试方法,也是常用的一种

    注意,print不带f,从c语言转过来的要注意

    类似其他语言,python对字符串也提供了占位符的特性,以方便字符串的格式输出
    python中点位符如下


    image.png

    字符串格式化

    在python中字符串格式化有以下几种方式可以实现

    使用点位符

    这是一种引入最早的一种,也是比较容易理解的一种方式
    使用方式为:

    1. 格式化字符串中变化的部分使用占位符
    2. 变量以元组形式提供
    3. 变量与格式化字符串之间以%连接

    例如:

    >>> a = 'test'
    >>> print('this is %s' % a)
    this is test
    >>> b = 1
    >>> print('a = %s, b = %d' % (a, b))
    a = test, b = 1
    >>>
    

    内建函数format

    format是string模块的一个内建函数,使用方法为str.format(args)
    这种方式下,格式化字符串中变量部分通过{}来占位,具体的值通过format函数的参数args提供,有以下几种方式

    • 根据参数位置顺序对应
      >>> print('a = {}, b = {}'.format(a, b))
      a = test, b = 1
      >>>
      
    • 通过参数位置标号来对应
      >>> print('b = {1}, a = {0}'.format(a, b))
      b = 1, a = test
      >>>
      
    • 通过参数名字对应
      >>> print('b = {1}, a = {0}, server = {server}'.format(a, b, server='www.jianshu.com'))
      b = 1, a = test, server = www.jianshu.com
      >>>
      
    • 根据元组元素对应
      >>> print('b = {0[1]}, a = {0[0]}, c = {1[0]}, d = {1[1]}'.format((a, b),(3, 4)))
      b = 1, a = test, c = 3, d = 4
      >>> 
      

    说明: []内为元组元素下标,[]前面的数字为元组做为参数的位置

    如果需要将结果进行对齐等操作,可以在{}中使用:,前面的是位置等参数,后面的对齐等符号,
    先看几个例子

    >>> print('a = {:.2f}'.format(1.324))
    a = 1.32
    >>> print('a = {:.10f}'.format(1.324))
    a = 1.3240000000
    >>> print('a = {:*^10}'.format(1.324))
    a = **1.324***
    >>> print('a = {:*^10}'.format('test'))
    a = ***test***
    >>> print('a = {:*^4}'.format('test'))
    a = test
    >>>
    

    说明:{:1234}

    1. 填充符/精度符,如上面例子中的*当变量结果不够显示时,就使用填充符进行填充剩余位置;例子中的.表示数字的精度符,位数不够显示时会用0填充
    2. 对齐符,^<>分别是居中、左对齐、右对齐
    3. 是一个数字,表示显示的结果中的字符个数,包含分隔符;如果前面是一个.,此数字表示保留几位小数
    4. 当变量是数字是,表示数字的类型

    string模块的Template

    这是string模块提供的一个模板类,默认使用$或者${}(建议使用这个)来占位,而不是%
    具体用法如下:

    >>> from string import Template
    >>> s='hi ${name}'
    >>> t = Template(s)
    >>> t.substitute(name='alex')
    'hi alex'
    >>> 
    

    Template还有一个safe_substitute函数,当格式化字符串中有变量未给出值时,此函数将占位符当成字符串输出,而substitute会报错

    >>> s1 = 'hi ${name}, ${age}'
    >>> t = Template(s1)
    >>> t.substitute(name='alex')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python3.8/string.py", line 126, in substitute
        return self.pattern.sub(convert, self.template)
      File "/usr/local/lib/python3.8/string.py", line 119, in convert
        return str(mapping[named])
    KeyError: 'age'
    >>> t.safe_substitute(name='alex')
    'hi alex, ${age}'
    >>>
    

    当需要输出一个$符号时,可以使用$$

    >>> s1 = 'hi ${name}, have $$100'
    >>> t = Template(s1)
    >>> t.substitute(name='alex')
    'hi alex, have $100'
    >>> 
    

    用户自定义Template

    Template是一个类,用户可以从此类中派生子类,来实现更为自定义的功能,例如将占位符$改为%

    >>> class MyTemplate(Template):
    ...     delimiter = '%'
    ... 
    >>> s = 'hi %{name}, have $100'
    >>> t = MyTemplate(s)
    >>> t.substitute(name='alex')
    'hi alex, have $100'
    >>> 
    

    同理,这个时候想输出一个%,就需要使用%%来转义

    >>> s = 'hi %{name}, have $100 100%%'
    >>> t = MyTemplate(s)
    >>> t.substitute(name='alex')
    'hi alex, have $100 100%'
    >>>
    

    f-string

    由python3.6版本引入的一个特性,称之为字面量格式化字符串,f-string 格式化字符串以f或者F开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去。

    先看一个例子

    >>> name = 'lucy'
    >>> print(f'my name is {name}')
    my name is lucy
    >>> 
    

    f-string不同于前几种方式,这种方式有很多好用的特性,如下

    • {}中可以做表达求值
      >>> a = 1
      >>> b = 2
      >>> print(f'a + b = {a+b}')
      a + b = 3
      >>> 
      
    • {}中可以调用函数
      >>> name = 'lucy'
      >>> print(f'my name is {name.upper()}')
      my name is LUCY
      >>> 
      
    • {}中使用或者
      保证{}内外使用的不一样即可,如下
      >>> print(f'test {"str"}')
      test str
      >>> print(f"test {'str'}")
      test str
      >>> 
      
    • {}中需要同时使用,则需要外部字符串使用文档字符串符号’‘’或者”“”
      >>> print(f'''{"it's name"} is dododo''')
      it's name is dododo
      >>> 
      
    • {}想作为字符输出,有两种方式:使用{{}}进行转换;将{}放到字符串中,如下
      >>> print(f'{{}}')
      {}
      >>> print(f'{"{}"}')
      {}
      >>> 
      
    • {}中不允许出现\即使作为函数参数;必须使用的话,可以将包含\的内容放到一个变量里,如下
      >>> f'print the {"\n"}'
        File "<stdin>", line 1
      SyntaxError: f-string expression part cannot include a backslash
      >>> newline='\n'
      >>> f'print the {newline}'
      'print the \n'
      >>> 
      
      >>>f'newline is: {ord('\n')}'
        File "<stdin>", line 1
          f'newline is: {ord('\n')}'
                                   ^
      SyntaxError: unexpected character after line continuation character
      >>> newline = ord('\n')
      >>> f'newline is: {newline}'
      'newline is: 10'
      >>> 
      
    • f-string可以用于多行字符串,有两种方式:使用连接符\; 使用doc字符串,如下
      >>> f'My name is {name}, ' \
      ... f'I\'m {age}'
      "My name is alex, I'm 27"
      >>> 
      >>> f'''My name is {name}, 
      ... I'm {age}'''
      "My name is alex, \nI'm 27"
      >>> 
      
    • 格式描述符
      与format内置函数类似,使用格式{content:format};其中格式如果使用默认的可以省略:format
      具体可以参考文章自定义格式一节

    相关文章

      网友评论

          本文标题:python学习笔记之--字符串格式化的几种方法

          本文链接:https://www.haomeiwen.com/subject/mwgfhrtx.html