• 超详细的格式化输出(format的基本玩法)


    一、format的基本玩法

    🚀🚀一、什么是format

    format是字符串内嵌(字符串内嵌:字符串中再嵌套字符串,加入双引号或单引号)的一个方法,用于格式化字符串。以大括号{}来标明被替换的字符串

    🚀🚀format玩法一:按顺序输出(按照{}的顺序依次匹配括号中的值)

    >>>s = '年龄 {} ,爱好{},性别 {}'.format(18,'发呆''男'
    >>>print(s)
    年龄18,爱好发呆,性别男
    

    🚀🚀format玩法二:按索引输出

    当数据多个重复的时候按索引来:例如以下代码爱好和喜欢相同(都是发呆)且发呆对应索引是1,所以大括号里可以用1来指向要被替换数据(发呆)在format()中的索引

    >>>s = '年龄 {0} ,爱好{1},性别 {2},喜欢{1}'.format(18,'发呆''男'
    >>>print(s)
    年龄18,爱好发呆,性别男,喜欢发呆
    

    🚀🚀format玩法三:通过参数名来匹配参数(也叫做使用关键字传递参数)


    >>>hobby = input('请输入你的爱好:'
    >>>s = '年龄{age},爱好{hobby},性别{sex}'.format(hobby = hobby,sex = 男,age = 18)
    >>>print(s)
    请输入你的爱好:发呆
    年龄18,爱好发呆,性别男
    

    🚀🚀format玩法四:通过默认,参数名来混搭进行使用

    代码一:

    hobby = input('请输入你的爱好:')
    s = '爱好{hobby},性别{}'.format('男',hobby = hobby)
    print(s)、
    输出结果
    爱好发呆,性别男
    

    🚀🚀format玩法需要注意的常见错误(切记,切记)


    ✨错误一✨ 代码一如果写成以下代码就会报错:仔细观察代码二与代码一的区别

    代码二:

    hobby = input('请输入你的爱好:')
    s = '爱好{hobby},性别{}'.format(hobby = hobby,'男')
    print(s)
    报错如下:
    s = '爱好{hobby},性别{}'.format(hobby = hobby,'男')
                                                          ^
    SyntaxError: positional argument follows keyword argument
    

    为什么我们将.format(hobby = hobby , '男')更改为.format('男' , hobby = hobby)
    就会报错呢??

    ❣️那是因为命名的参数(变量)必须写到最后。否则会编译报错❣️hobby是我们命名的一个参数所以必须放在最后。

    ✨错误二✨
    ❣️❣️不可以索引和默认格式化混合使用:

    所以以下代码均会报错:

    >>>s = '爱好{},性别{1}'.format('发呆','男')
    >>>print(s)
    报以下错误:
    ValueError: cannot switch from automatic field numbering to manual field specification
    
    >>>s = '爱好{},性别{0}'.format('男','发呆')
    >>>print(s)
    报以下错:
    ValueError: cannot switch from automatic field numbering to manual field specification
    

    二、format的进阶玩法

    🎉🎉玩法五、通过对象的属性(详细见代码注释)

    首先我们定义一个函数Names()在函数内定义一个局部变量a

    >>>def Names():
    >>>    a = '周周'
    #然后将 a 调用出来做为关键字传参
    >>>s = '我叫{names.a}'.format(names = Names)
    我叫周周
    

    🎉🎉玩法六、支持对参数部分引用

    可以通过索引对参数的部分进行取值。如:s = '1男生1'我们只需要'男'这一部分我们就可以采用切片s[1]将其切出,再传递到对应部分。

    >>>char = '性别{s[1]}'.format(s = '1男生1')
    >>>print(char)
    性别男
    

    🎉🎉玩法七、使用format 使结果保留两位小数

    一般需要使用 (:. 2f),在用%进行格式化时我们使用的是(%.2f )🔥操作方法如下:

    >>>s1 = 'π是{:.2f}'.format(3.1415926)
    >>>print(s1)
    >>>s2 = 'π是%.2f'% 3.1415926
    >>>print(s2)
    π是3.14
    π是3.14
    同时这种方法还可以用于字符串截取,不过数字后面就不能加f了🔥操作方法如下🔥
    
    #{:1}指截取索引为[0:1]的字符(顾头不顾尾)
    s = '性别{:.1}'.format('男生122')
    #{:2}指截取索引为[0:2]的字符(顾头不顾尾)
    m = '性别{:.2}'.format('男生122')
    print(s)
    print(m)
    性别男
    性别男生
    

    🎉🎉玩法八、 format中格式的处理

    在占位符中还可以有格式化控制符,对字符串的格式进行更加精准 的控制。格式化控制符位于占位符索引或占位符名字的后面,之间用冒号分隔,语法:{参数序号:格式控制符}或{参数名:格式控制符}。字符串的格式化控制符及其说明如下表所示:



    🔥操作方法如下表:🔥


    >>> format(3.1415936)
    '3.1415936'
    >>> str(3.1415926)
    '3.1415926'
    #字符串可以提供的参数,指定对齐方式,<是左对齐, >是右对齐,^是居中对齐
    >>>print(format('test', '<20'))
    >>>print(format('test', '>20'))
    >>>print(format('test', '^20'))
    test
                    test
            test
    
    #整形数值可以提供的参数有 'b' 'c' 'd' 'o' 'x' 'X' 'n' None
    >>> format(3,'b') #转换成二进制
    '11'
    >>> format(97,'c') #转换unicode成字符
    'a'
    >>> format(11,'d') #转换成10进制
    '11'
    >>> format(11,'o') #转换成8进制
    '13'
    >>> format(11,'x') #转换成16进制 小写字母表示
    'b'
    >>> format(11,'X') #转换成16进制 大写字母表示
    'B'
    >>> format(11,'n') #和d一样
    '11'
    >>> format(11) #默认和d一样
    '11'
    
    #浮点数可以提供的参数有 'e' 'E' 'f' 'F' 'g' 'G' 'n' '%' None
    >>> format(314159267,'e') #科学计数法,默认保留6位小数
    '3.141593e+08'
    >>> format(314159267,'0.2e') #科学计数法,指定保留2位小数
    '3.14e+08'
    >>> format(314159267,'0.2E') #科学计数法,指定保留2位小数,采用大写E表示
    '3.14E+08'
    >>> format(314159267,'f') #小数点计数法,默认保留6位小数
    '314159267.000000'
    >>> format(3.14159267000,'f') #小数点计数法,默认保留6位小数
    '3.141593'
    >>> format(3.14159267000,'0.8f') #小数点计数法,指定保留8位小数
    '3.14159267'
    >>> format(3.14159267000,'0.10f') #小数点计数法,指定保留10位小数
    '3.1415926700'
    >>> format(3.14e+1000000,'F')  #小数点计数法,无穷大转换成大小字母
    'INF'
    
    #g的格式化比较特殊,假设p为格式中指定的保留小数位数,先尝试采用科学计数法格式化,得到幂指数exp,如果-4<=exp>>> format(0.00003141566,'.1g') #p=1,exp=-5 ==》 -4<=exp
    '3e-05'
    >>> format(0.00003141566,'.2g') #p=1,exp=-5 ==》 -4<=exp
    '3.1e-05'
    >>> format(0.00003141566,'.3g') #p=1,exp=-5 ==》 -4<=exp
    '3.14e-05'
    >>> format(0.00003141566,'.3G') #p=1,exp=-5 ==》 -4<=exp
    '3.14E-05'
    >>> format(3.1415926777,'.1g') #p=1,exp=0 ==》 -4<=exp
    '3'
    >>> format(3.1415926777,'.2g') #p=1,exp=0 ==》 -4<=exp
    '3.1'
    >>> format(3.1415926777,'.3g') #p=1,exp=0 ==》 -4<=exp
    '3.14'
    >>> format(0.00003141566,'.1n') #和g相同
    '3e-05'
    >>> format(0.00003141566,'.3n') #和g相同
    '3.14e-05'
    >>> format(0.00003141566) #和g相同
    '3.141566e-05'
    

    🎉🎉 玩法九、字符填充

    可通过(: 符号^数字)进行字符串的填充。 其中数字为填充后的字符串总长度操作如下:

    s = "{:*^10}".format('12345')
    print(s) 
    **12345***
    
    s = "{:-^20}".format('123456')
    print(s)
    -------123456-------
    

    但是如果数字{要求的长度}小于字符串的长度,则不进行填充操作。

    #这里要求字符串的长度是3,但是已经是5了,所以不会填充
    s = "{:*^3}".format('12345')
    print(s)
    12345
    

    🎉🎉 玩法十:对列表(list)、字典(dic)的拆分

    在format格式化时,可使用* 或者 ** 进行对list、dic拆分。

    foods = ['鱼', '虾', '肉']
    s = '我爱吃{}和{}和{}'.format(*foods)
    print(s)
    我爱吃鱼和虾和肉
    
    foods = ['鱼', '虾', '肉']
    s = '我爱吃{2}和{0}和{1}'.format(*foods)
    print(s)
    我爱吃鱼和虾和肉
    
    dict_temp = {'爱好':'发呆','姓名':'周周'}
    # 字典需要用 ** 进行拆分
    s = '我叫{姓名},爱好{爱好}'.format(**dict_temp)
    print(s)
    我叫周周,爱好发呆
    结语:
    

    __EOF__

  • 本文作者: 在下周周ovo
  • 本文链接: https://www.cnblogs.com/zaixiazhouzhou/p/16673788.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    transformer一统天下?depth-wise conv有话要说
    Linux 简介 & 启动过程
    Kafka(四) Consumer消费者
    【狂神说Java】Mybatis学习笔记(下)
    从一到无穷大 #3 对象存储.浅谈
    随想录一期 day4 [24. 两两交换链表中的节点|19. 删除链表的倒数第 N 个结点|面试题 02.07. 链表相交|142. 环形链表 II]
    SQLServer下载与安装
    面试如何准备Redis的问题(含缓存穿透,持久化和数据一致性等知识点)
    微信小程序(分包)
    pandas.read_csv() 处理 CSV 文件的 6 个有用参数
  • 原文地址:https://www.cnblogs.com/zaixiazhouzhou/p/16673788.html