zoukankan      html  css  js  c++  java
  • python格式化字符串

    Python格式化字符串的4种方式

    一:%号

     %号格式化字符串的方式从Python诞生之初就已经存在,时至今日,python官方也并未弃用%号,但也并不推荐这种格式化方式。

    # 1、格式的字符串(即%s)与被格式化的字符串(即传入的值)必须按照位置一一对应
    # ps:当需格式化的字符串过多时,位置极容易搞混
    print('%s asked %s to do something' % ('egon', 'lili'))  # egon asked lili to do something
    print('%s asked %s to do something' % ('lili', 'egon'))  # lili asked egon to do something
    
    # 2、可以通过字典方式格式化,打破了位置带来的限制与困扰
    print('我的名字是 %(name)s, 我的年龄是 %(age)s.' % {'name': 'egon', 'age': 18})  #我的名字是 egon, 我的年龄是 18.
    
    kwargs={'name': 'egon', 'age': 18}
    print('我的名字是 %(name)s, 我的年龄是 %(age)s.' % kwargs)  #我的名字是 egon, 我的年龄是 18.

    二:str.format

     该format方法是在Python 2.6中引入的,是字符串类型的内置方法。因为str.format的方式在性能和使用的灵活性上都比%号更胜一筹,所以推荐使用

    2.1 使用位置参数

    # 按照位置一一对应
    print('{} asked {} to do something'.format('egon', 'lili'))  # egon asked lili to do something
    print('{} asked {} to do something'.format('lili', 'egon'))  # lili asked egon to do something

    2.2 使用索引

    # 使用索引取对应位置的值
    print('{0}{0}{1}{0}'.format('x','y')) # xxyx

    2.3 使用关键字参数or字典

    # 可以通过关键字or字典方式的方式格式化,打破了位置带来的限制与困扰
    print('我的名字是 {name}, 我的年龄是 {age}.'.format(age=18, name='egon'))
    #print("{x:=^10},my name is {y}".format(x="开始执行",y="egon"))   #打印结果===开始执行===,my name is egon
    kwargs = {'name': 'egon', 'age': 18} print('我的名字是 {name}, 我的年龄是 {age}.'.format(**kwargs)) # 使用**进行解包操作

    2.4 填充与格式化

    # 先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度]
    
    # *<10:左对齐,总共10个字符,不够的用*号填充
    print('{0:*<10}'.format('开始执行')) # 开始执行******
    
    # *>10:右对齐,总共10个字符,不够的用*号填充
    print('{0:*>10}'.format('开始执行')) # ******开始执行
    
    # *^10:居中显示,总共10个字符,不够的用*号填充
    print('{0:*^10}'.format('开始执行')) # ***开始执行***

    2.5 精度与进制

    print('{salary:.3f}'.format(salary=1232132.12351))  #精确到小数点后3位,四舍五入,结果为:1232132.124
    print('{0:b}'.format(123))  # 转成二进制,结果为:1111011
    print('{0:o}'.format(9))  # 转成八进制,结果为:11
    print('{0:x}'.format(15))  # 转成十六进制,结果为:f
    print('{0:,}'.format(99812939393931))  # 千分位格式化,结果为:99,812,939,393,931

    三:f-Strings(不推荐使用,python3.5之后版本才有的用法)

    str.format() 比 %格式化高级了一些,但是它还是有自己的缺陷。当需要传入的字符串过多时,仍然会显得非常冗长。与在Python 3.6中引入 了f-strings,不仅比str.format更简洁,性能上也更胜一筹

    ​ f-string是以f或F开头的字符串, 核心在于字符串中符号{}的使用

    3.1 {}中可以是变量名

    name = 'egon'
    age = 18
    print(f'{name} {age}')  # egon 18
    print(F'{age} {name}')  # 18 egon

    3.2 {}中可以是表达式

    # 可以在{}中放置任意合法的Python表达式,会在运行时计算
    # 比如:数学表达式
    print(f'{3*3/2}') # 4.5
    
    # 比如:函数的调用
    def foo(n):
        print('foo say hello')
        return n
    
    print(f'{foo(10)}') # 会调用foo(10),然后打印其返回值
    
    # 比如:调用对象的方法
    name='EGON'
    print(f'{name.lower()}') # egon

    3.3 在类中的使用

    >>> class Person(object):
    ...     def __init__(self, name, age):
    ...         self.name = name
    ...         self.age = age
    ...     def __str__(self):
    ...         return f'{self.name}:{self.age}'
    ...     def __repr__(self):
    ...         return f'===>{self.name}:{self.age}<==='
    ... 
    >>> 
    >>> obj=Person('egon',18)
    >>> print(obj) # 触发__str__
    egon:18
    >>> obj        # 触发__repr__
    ===>egon:18<===
    >>> 
    >>> 
    >>> 
    >>> # 在f-Strings中的使用
    >>> f'{obj}'   # 触发__str__
    'egon:18'
    >>> f'{obj!r}' # 触发__repr__
    '===>egon:18<==='
  • 相关阅读:
    xshell入门及Linux常用命令
    C++之vector
    c++ 之 string
    引用 与 指针
    关于时间复杂度的计算以及相关概念
    位运算
    thymeleafDemo
    面试总结
    关于mvvm原理实现,模拟vue(3)-----发布订阅
    关于mvvm原理实现,模拟vue(2)-----模板编译
  • 原文地址:https://www.cnblogs.com/baicai37/p/12421816.html
Copyright © 2011-2022 走看看