%-formatting的%运算符与格式化规范
请详述Python %运算符字符串格式化的各种占位符、转换类型和格式修饰符。常见陷阱有哪些(如元组vs单值、字典key冲突、中文字符串对齐问题)?
回答
专业代码师
%-formatting的占位符格式:%[flags][width][.precision]type
类型占位符:
%s字符串(调用str())%r字符串(调用repr())%d/%i十进制整数%f浮点数(默认6位小数)%e/%E科学计数法%g/%G自动选择%f或%e%x/%X十六进制%%转义百分号
格式修饰符:
%10s右对齐,宽度10%-10s左对齐%010d前导零填充%.2f保留两位小数%+d显示正负号
常见陷阱:
# 陷阱1:元组vs单值
'Error: %s' % 'msg' # OK
'Error: %s' % ('msg',) # OK
'Values: %s, %s' % (1,) # TypeError: not enough arguments
# 陷阱2:字典key冲突
'%(name)s %(name)s' % {'name': 'Alice'} # OK
'%(key)s' % {'key': 1, 'name': 2} # KeyError如果没有匹配
# 陷阱3:中文字符串对齐
# '%10s' % '你好' # 中文字符在宽终端中宽度不统一
# 建议使用str.format()或unicodedata.east_asian_width()
# 陷阱4:%r和%s的区别
print('%s' % 'hello\nworld') # hello换行world
print('%r' % 'hello\nworld') # 'hello\nworld'(带引号,保留转义)