zoukankan      html  css  js  c++  java
  • %和format的区别

      在python中字符串的格式化分为两种:%和format。那么我们在什么时候来使用它们呢?它们有什么区别呢?

      举个例子:我们根据一个坐标来表示一个动作

    #定义一个坐标
    point = (250,250)
    #使用%来格式化
    s = '朝着敌人的坐标%s开炮'%point
    print(s)  #直接报错
    #TypeError: not all arguments converted during string formatting
    
    #将s改为如下就不会报错了
    s = '朝着敌人的坐标%s开炮'%(point,)
    print(s)  # 不报错

    同样的我们使用format就不会出现这样的问题:

    #使用format格式化
    s = '朝着敌人的坐标{}开炮'.format(point)
    print(s)  # 正常输出

      由此可见:format比%的功能更强

    下面我们来对format的用法进行简单的了解

    1.直接f+string

    在python3.6以后,加入了一个新特性:f-strings

    
    
    #我们定义两个变量  name  age
    name = 'snow'
    age = 18
    s = f'我叫{name},今年{age}岁'
    print(s)
     

    可以直接在字符串的前面加上f来格式化字符串,更简单。

    2 通过位置

    #我们也可以通过索引来直接用  使用*将列表打散,通过索引来取值
    s1 = '我叫{0},今年{1}岁,喜欢{2}'.format(*l1)
    print(s1)

    3 通过关键字

    #也可以通过**将字典打散,通过key来取值
    d = {'name':'shine','age':20,'hobby':'music'} s2 = 'my name is {name},i am {age} years old , i like {hobby}'.format(**d) print(s2)

    4.通过对象属性

    #在类中,我们可以自定义__str__方法来实现特定的输出
    class Person:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def __str__(self):
            return 'Name:{self.name}  Age:{self.age}'.format(self = self)  # 我们可以将self传入{}中
    person = Person('sun',22)
    print(person)

    5.通过下标

    #我们可以利用下标+索引
    l1 = ['zhe','20','Teacher']
    s4 = 'I am a {0[2]},my name is {0[0]},{0[1]} years old'.format(l1)
    print(s4)

    6. 填充与对齐

    填充常跟对齐一起使用
    ^、<、>分别是居中、左对齐、右对齐,后面带宽度
    :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充。
    s = '{:>10}'.format('18')  #>后面的10 表示总共多少字符,10个字符,18占两个,剩余的用空格填充
    print(s)    #       18   :后面带填充的字符,默认为空
    
    s1 = "{:0>10}".format('18')
    print(s1)   #0000000018
    
    s2 = '{:*>10}'.format('18是否')
    print(s2)    #******18是否

    备注:Python  字符串中的zfill()方法: 返回指定长度的字符串,原字符串右对齐,前面填充0。

    zfill()方法语法:str.zfill(width)
    参数width指定字符串的长度。原字符串右对齐,前面填充0。
    返回指定长度的字符串。
    
    
    s = '演员'
    ret = s.zfill(10)
    print(ret)
     

    7. 精度与类型f

    精度常跟类型f一起使用。   { :.nf} .format(数字)        .n 表示保留n位小数  
    
    
    num = 2.13658
    print('{:.2f}'.format(num)) #2.14 四舍五入取固定位数的小数 其中.2表示长度为2的精度

    num = 3
    print('{:.2f}'.format(num)) #3.00 对于整数直接在保留固定位的小数位
     

    8. 其他进制

    format中,b、d、o、x分别表示二进制、十进制、八进制、十六进制。
    复制代码
    In[1]: "{:b}".format(18)  # 取18的二进制
    Out[1]: '10010'   
    In[2]: "{:d}".format(18)  # 取18的十进制
    Out[2]: '18'
    In[3]: "{:o}".format(18)  # 取18的八进制
    Out[3]: '22'
    In[4]: "{:x}".format(18)  # 取18的十六进制
    Out[4]: '12'
    复制代码

    9. 千位分隔符

    {:,}.format  中       冒号加逗号  表示可以将一个数字三位三位的用逗号分隔

    In[1]: "{:,}".format(1234567890)
    Out[1]: '1,234,567,890'
  • 相关阅读:
    ERP/MIS开发 30道ORM问题与解答 LLBL Gen 3.x Adapter
    升级LLBL Gen 2.x项目到3.x
    软件公司为什么要加密源代码,而且是前前后后,反反复复
    ERP/MIS系统中集成命令行式的功能调用
    工作多年后才明白的.NET底层开发技术
    OSGI:从面向接口编程来理解OSGI
    幸福框架:如何阅读幸福框架的代码
    OSGI:C#如何实现简单的OSGI
    技术人生:技术之路,需要的是热情和梦想
    EHR:对人力资源信息系统的认识
  • 原文地址:https://www.cnblogs.com/zhaopanpan/p/8875765.html
Copyright © 2011-2022 走看看