首页 > 其他 > 详细

字符串str.format()方法的个人整理

时间:2019-05-04 13:26:56      阅读:193      评论:0      收藏:0      [点我收藏+]

引言

字符串的内置方法大致有40来个,但是一些常用的其实就那么20几个,而且里面还有类似的用法,区分度高比如isalpha,isalnum,isdigit,还有一些无时不刻都会用到的split切分,join拼接,strip首尾去指定字符,作用无非就是围绕字符串的增删改查来进行,本人认为要弄清楚和熟练使用这些常用的方法,一方面需要在理解的基础上多多练习多多回顾,同时在工作使用中去巩固,加深记忆。忘记没关系,善于总结归纳,善于对自己大脑记忆的‘增删改查’才是重点。

str.format的意义

作为一个初学者,最近发现字符串中最繁杂的一个方法莫过于:str.format()了,format见名思义,格式化,格式化完为了干嘛,其实就是为了得到我们需要格式的数据,也就是格式化输出,格式化输出我们一开始学习的是用%s、%d来实现,但是这种方法有很多局限性,比如%s是按照位置格式化输出,局限性显而易见,如果一次性格式化输出太多,还是根据位置来输出的话就太容易出错了。所以更精确的一种格式化输出方法就是str.format()

str.format方法介绍

1、通过字符串中的花括号{}来识别替换字段,从而完成字符串的格式化。

2、替换的内容包括:字段名、格式说明符三部分,形式一般为:{字段名:格式说明符}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以上是简介,下面是干货:

具体实现:

1、简单实现方法:

  • 省略不写{} ____写法类似%s按位置格式化输出
  • 数字{十进制非负整数} ____写法类似依据位置索引传参
  • 变量名{关键字} ____写法类似关键字参数传参
  • 可以混合使用

1.1 省略不写:花括号内省略不写,代表传递位置参数

  • 替换字段形式{}
  • 注意事项:花括号个数少于等于后面的位置参数的个数,多了肯定报错。
    # 用{}代表占位符,直接位置传参
    print(我是{},喜欢{}!.format(灭霸,打响指))
    # 我是灭霸,喜欢打响指!
    
    # {}数量必须少于后面位置参数数量,不然报错
    print(我是{},喜欢{},不喜欢{}。.format(宙斯,放大抢人头,放空大,小短腿))
    
    print(我是{},喜欢{},不喜欢{}。.format(宙斯,放大抢人头))
    # 报错误:IndexError: tuple index out of range

1.2 数字形式传参:通过位置索引值传递位置参数

  • 索引从整数0开始
  • 索引可以重复引用,输出
  • 索引数值就是后面位置参数放入一个元组来取值的过程,所以索引数值不能大于元组里面位置参数的最大索引值,否则报错
    print(我身高{0},年龄正好{1},{2}长。.format(180cm,18,15cm))
    # 我身高180cm,年龄正好18,15cm长。
    print(我身高{0},{0}不多不少,年龄正好{1}。.format(180cm,18))
    # 我身高180cm,180cm不多不少,年龄正好18。
    print(我身高{0},年龄正好{1},{2}长。.format(180cm,18))
    # IndexError: tuple index out of range

1.3 变量名{关键字} 传递输出参数

  • 想想关键字参数怎么传参,类比一下,bingo!
  • 特别注意,关键字的变量名在参数那里无需加引号,同时{}里面引用直接填变量名。
    print(我的名字叫{name},我其实是一名{career}!.format(name=尹天仇,career=演员))
    # 我的名字叫尹天仇,我其实是一名演员!
    print(我叫{name2},又名{name1},我弟弟叫{name3}!.format(name1=至尊宝,name2=秦汉,name3=秦祥林))
    # 我叫秦汉,又名至尊宝,我弟弟叫秦祥林!

1.4 {}、{0}、{name}混合使用

  • 位置参数在前,关键字参数在后
  • {}不能与数字形式{0}同时使用。
    print(吹个{0},吹个{2},吹大了{1},玩{ball}!.format(,气球,大气球,ball=球球))
    # 吹个球,吹个大气球,吹大了气球,玩球球!
    print(吹个{},吹大了{},玩{ball}!.format(,气球,大气球,ball=球球))
    # 吹个球,吹大了气球,玩球球!
    print(吹个{0},吹大了{1},玩{ball}!.format(,气球,大气球,ball=球球))
    # 吹个球,吹大了气球,玩球球!
    print(吹个{0},吹大了{},玩{ball}!.format(,气球,大气球,ball=球球))
    #报错 ValueError: cannot switch from manual field specification to automatic field numbering

2、使用元组和字典传参:

  • str.format()方法可以使用*元组和**字典的形式传参,可以混用。
  • 方法相当于*args和**kwargs打散传参,元组按位置或索引传参,字典按关键字传参。
  • 位置参数、关键字参数、*元组、**字典也可以同时使用,但要注意位置参数在关键字参数前,*元组要在**字典前。
    # 元组
    print(我喜欢{},喜欢{},同时也喜欢{}!.format(*(篮球,足球,观球)))
    # 我喜欢篮球,喜欢足球,同时也喜欢观球!
    print(我喜欢{0},喜欢{1},同时也喜欢{2}!.format(*(篮球,足球,观球)))
    # 我喜欢篮球,喜欢足球,同时也喜欢观球!
    
    # 字典
    print({name}的女朋友是{gf},我也喜欢{gf}!.format(**{name:钢铁侠,gf:小辣椒}))
    # 钢铁侠的女朋友是小辣椒,我也喜欢小辣椒!
    
    # 元组+字典
    print(我是{beauty}的{1},我们都喜欢{0},请大家{2}!      .format(*(球类,球迷,文明观球),**{beauty:斯嘉丽约翰逊,}))
    # 我是斯嘉丽约翰逊的球迷,我们都喜欢球类,请大家文明观球!
    
    # 位置参数、关键字参数、元组、字典混合使用:
    print(我是{name},好像{age}了 ^_^,在{0},等你哦!\n喜欢{1}、{2}和{3}。\n我的唯一 >>>:{only_one}\n我的小可爱 >>>: {love}!      .format(武汉,name=苏光体,age=18,*(读书,健身,折腾数码),**{only_one:杨林,love:苏弘睿}))
    # 我是苏光体,好像18了 ^_^,在武汉,等你哦!
    # 喜欢读书、健身和折腾数码。
    # 我的唯一 >>>:杨林
    # 我的小可爱 >>>: 苏弘睿!

  使用元组或者字典格式化输出的形式就是相当于将元组和字典打散,变成位置参数们和关键字参数们然后按照前面的方法传参就行

3、对象参数格式化输出传值:

  • formate还可以使用对象属性传参,这个对象可以是实例化的对象,也可以是列表、字典
    # 对象属性传参
    # 实例化对象:
    class Dog:
        def __init__(self,name,speak):
            self.name=name
            self.speak=speak
    
    dog1=Dog(小黄,汪汪汪)
    print(我的{0.name}会{0.speak}。.format(dog1))
    # 我的小黄会汪汪汪。
    # 文件对象
    with open(text.txt,wb) as f:
        print(打开的文件名为:{0.name}.format(f))
    # 打开的文件名为:text.txt
    
    # 列表、字典对象
    print(I have a {0[0]} , I have a {0[1]} ..format([Apple,Pen]))
    print(我叫{0[name]},{0[id]}就是我!.format({name:阿星,id:9527}))
    print({1[name]}变成了{0[0]},藏进了{1[role]}的裤裆里,为什么不变{0[1]}而是{0[0]}呢?.format([葡萄,苹果],{name:菩提老祖,role:至尊宝}))
    # I have a Apple , I have a Pen .
    # 我叫阿星,9527就是我!
    # 菩提老祖变成了葡萄,藏进了至尊宝的裤裆里,为什么不变苹果而是葡萄呢?

4、格式说明符:规定传入参数字符的格式

  • 比如:
    print({0:.4f}.format(3.1415926))
    #在传入参数后面用冒号:写入规定的格式:.4f(取4位小数) 结果为:3.1416
  • 说明符格式标准:[填充]对齐方式][正负号][#][0][宽度][分组选项][.精度][类型码]   同时存在是有顺序之分的,具体使用下面有具体示例:
  • 填充:
    • 填充字符只能有一个
    • 不指定默认用空格填充
    • 如果指定填充字符,则必须要同时指定对齐方式
  • 对齐方式:
    • <    左对齐
    • >    右对齐
    • ^    居中对齐
    • =    在正负号和数字之间填充(仅对数字类型有效)可以输出类似:+00000012的字符串。
  • 正负号:
    • 仅对数字类型生效
    • + - 正负号
    •  空格:正数前面需要添加一个空格,以便与负数对齐
  • 宽度width
    • 不指定宽度,宽度由内容决定
    • 宽度前有0,意味着用0填充,等价于 0=的填充和对齐方式
  • 精度
    • 指小数点后面展示的小数位数
    • 对于非数字类型,指最大字段宽度
    • 整数类型不能指定精度,会报错的
  • 下面看示例吧:
    #在传入参数后面用冒号:写入规定的格式:.4f(取4位小数) 结果为:3.1416
    # 填充、对齐、宽度
    print({0:人>2}.format(<我是谁>))   # 宽度不够,按实际字符显示
    print({0:人<11}.format(<我>))
    print({0:人^11}.format(<我>))
    # <我是谁>
    # <我>人人人人人人人人
    # 人人人人<我>人人人人
    
    # 正负号、精度
    print({0:*=+10.4f}.format(3.1415926))  # ‘*‘>填充符,‘=‘>指定在正负号和数字之间填充,‘10‘>宽度,‘.4f‘>精度
    print({0:*>+10.4f}.format(3.1415926))  # 同上,‘>‘>右对齐
    # +***3.1416
    # ***+3.1416
    
    print({0:&>10.4f}.format(3.1415926))
    print({0:&<10.4f}.format(3.1415926))
    print({0:&>10.4}.format(我是中国人))  # 精度为4,去字符串中的前4个字符
    # &&&&3.1416
    # 3.1416&&&&
    # &&&&&&我是中国
  • 类型码(规定输出的数据类型)
    • 字符串类型
    • 整数类型
    • 浮点数类型

  

 

  

字符串str.format()方法的个人整理

原文:https://www.cnblogs.com/suguangti/p/10808168.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!