Python学习笔记--字符串格式化

字符串格式化

字符串格式化是拼接字符串的一种手段。在字符串的常用方法中的join()方法便是一种拼接手段。

>>> ' '.join(['xu','love','you'])
'xu love you'

但是,join和拼接字符串难以控制格式。所以我们需要进一步的工具。

print style 字符串格式化

通过占位符来达到字符替换的作用
占位符:%,加一个格式控制符
当待格式化的字符串中存在占位符的时候:s = '人的偏执 %s'
接着通过在字符串后面追加一个百分号,再追加一个元组,在元组中放入你需要的字符串即可

>>> s = '人的偏执 %s'
>>> s % ('也挺好')
'人的偏执 也挺好'

传入参数顺序的替换占位符,返回替换后的字符串,这是原地不修改,有返回值的:

>>> 'i am %d ,and i feel %s' % (21,'happy')
'i am 21 ,and i feel happy'
#若传入的数量不对等,类型不对等,就会报TypeError
#当占位符是%s的时候,其实隐式调用了str()
#当占位符是%r时,其实时隐式调用了repr()
#关于这些repr和str的区别,会在后面进行总结。暂且搁置。

如果想原样输出%s,在前面要多一个百分号。

>>> '%%%s' % (18,)
'%18'

(当我们在拼接sql时,一定要使用这种方法,可以帮助避免恶意攻击)

format方法

format方法使用大括号作为占位符

>>> s = '人的偏执 {}'
>>> s.format(' 也挺好')
'人的偏执  也挺好'
#可以加入多个{}
>>> s = 'i am {} ,and i feel {}'
>>> s.format(21,'happy')
'i am 21 ,and i feel happy'
#可以在占位符里加数字,指定format参数的位置
>>> s = 'i am {1} ,and i feel {0}'
>>> s.format(21,'happy')
'i am happy ,and i feel 21'
#参数可以通过指定位置方式多次使用
>>> s = 'i am {1} ,and i feel {1}'
>>> s.format(21,'happy')
'i am happy ,and i feel happy'
#可以在占位符里加标识符,来使用关键字参数
>>> s = 'i am {age} ,and i feel {emtion}'
>>> s.format(age = 21,emtion = 'happy')
'i am 21 ,and i feel happy'
#且同时支持使用位置和关键字参数
>>> s = 'i am {0} ,and i feel {emtion}'
>>> s.format(21,emtion = 'happy')
'i am 21 ,and i feel happy'

位置参数必须要在前面,关键字参数在后面
占位符和参数不匹配或者参数超出均会抛出异常

  • {}按照顺序,使用位置参数
  • {数字 i}会把位置参数当成一个列表args,args[i],当i不是args的索引时,会抛出异常
  • {关键字 k}会把关键字参数当成一个字典kwagrs,使用kwagrs[k],当k不是kwagrs的key时,会抛出KeyError
  • 若需要打印{},则在外面加一层{}即可。
>>> '{{}}'.format(18)
'{}'
>>> '{{{}}}'.format(18)
'{18}'

指令集

部分数字占位符在进行数据清理和过滤的时候十分有用。
数字占位符
浮点和小数可用类型:
浮点和小数可用类型

f前缀

在f前缀之前还学过r、u这两个前缀。

  • u前缀:
    u"字符串。"
    作用:后面字符串以Unicode 格式进行编码一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。
  • r前缀:
    r"\n\n\n\n”  # 表示一个普通生字符串 \n\n\n\n,而不表示换行。
    作用:去掉反斜杠的转义机制
  • b前缀:
    response = b'<h1>Hello World!</h1>' # b’ ’ 表示这是一个 bytes 对象
    作用:b" "前缀表示:后面字符串是bytes 类型。

而f前缀,和format非常相近:

>>> who = '傅菁'
>>> do = '爱'
>>> whom = '五选一的奶茶'
>>> f'{who}{do}{whom}'
'傅菁爱五选一的奶茶'

在代码块的上文中已经提及到这些变量后,便可以直接调用f前缀加上这些关键来组合。
除了语法上有些许不同外,format有的,f-string都有,也更加推荐使用该方法。

import decimal

from datetime import datetime

>>> name = "Fred"
>>> f"He said his name is {name!r}."
"He said his name is 'Fred'."
>>> f"He said his name is {repr(name)}."  # repr() is equivalent to !r
"He said his name is 'Fred'."
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result:{value:{width}.{precision}}" # nested fields嵌套字段
'result:     12.35'
>>> today = datetime(year=2019,month=7,day=15)
>>> f"{today:%B %d, %Y}"  # using date format specifier
'July 15, 2019'
>>> number = 1024
>>> f"{number:#0x}"  # using integer format specifier
'0x400'

小结

字符串格式化的三种方式。f-string学好了会方便很多。指令集也可以多看看。加油!!!希望自己可以这个星期学到第三章的内容!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值