[Python]_[初级]_[字符串格式化的三种方法]

Posted infoworld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python]_[初级]_[字符串格式化的三种方法]相关的知识,希望对你有一定的参考价值。

场景

  1. 在开发网络应用的时候,会用到URL的一些拼接替换处理。比如某个链接的部分需要替换为其他内容,其他部分保持不变,那么有没有快捷的字符串模板替换库呢?

  2. 在阅读第三方代码时,会看到f"xxxx1"这类的字符串,这是什么语法?

说明

  1. 最常用的是print风格的格式化字符串,如print('%s,%s %s' % ("Hi,", "Hello", "World"))。 这种格式化风格是最早的字符串格式化方式,这种方式有它自己的特点:

    • 如参数列表必须一一对应%声明顺序。
    • 有多少个%就必须有多少个值,值不能重用。 比如str.format()格式化可以支持值重用"1,0,1".format(1,2), 或者f"name.value.name"
    • 不支持对象格式化,比如datetime对象。
    • 数值不支持格式化为二进制格式。
  2. 最新的字面常亮f""格式化就是str.format()的简化版,具备它大多数的格式语法。最常见的就是命名参数格式化。

name = "Tobey"
line = f"My name is name or name!s or name!r or repr(name)"
print(line)
  1. f""str.format()支持数值二进制输出.
number = 1024
line = f"number:#0x" # 0x400
print(line)
line = f"number:b" # 10000000000
  1. 输出时间格式等[3]
today = datetime(year=2023, month=2, day=1)
line = f"today:%Y%m%d" # 20230201
print(line)

例子

  1. 这里有三种字符串格式方法, 详细的使用方式看例子.

import decimal
from datetime import datetime

def TestPrecentSignFormat():
	print("==== TestPrecentSignFormat BEGIN ====")
	line = '%s,%s %s' % ("Hi,", "Hello", "World")
	print(line)
	line = "%s" % "https://blog.csdn.net/infoworld"
	print(line)
	number = 1037
	line = "hex is %x or %X" % (number,number)
	print(line)
	line = "Decimal is %d" % number
	print(line)
	line = "Float is %03.2f" % number
	print(line)

	print("==== TestPrecentSignFormat END ====")

def TestStringFormat():
	print("==== TestStringFormat BEGIN ====")

	# 使用n来表示第n个参数,n是数值
	line = "1,2,0".format(0,1,2) # 1,2,0
	print(line)
	
	# 如果不使用序号,那么代表着顺序
	line = ",,".format(0,1,2) # 0,1,2
	print(line)

	# *符号表示解包参数序列
	line = "1,2,0".format(*[11,22,33])
	print(line)

	# 所有f""可以使用的语法都可以使用, 对象格式化需要加:xxx格式
	today = datetime(year=2023, month=2, day=1)
	line = ":%Y%m%d".format(today) # 20230201
	print(line)

	# 数值格式化
	number = 1023.2023
	line = ":03.2f".format(number)
	print(line)

	# 自定义参数名
	line = 'Coordinates: latitude, longitude'.format(latitude='37.24N', longitude='-115.81W')
	print(line)

	print("==== TestStringFormat END ====")

def TestFormatStringLiterals():
	print("==== TestFormatStringLiterals BEGIN ====")
	# 字符串字面常亮格式化使用str.format()方法来格式化。
	# 作为模板变量
	# 在3.6版本以后支持
	name = "Tobey"
	# !s相当于str(), !r相当于repr()
	line = f"My name is name or name!s or name!r or repr(name)"
	print(line)

	# 格式化数据类型,使用:符号
	precision = 5 # 精度是5位
	value = decimal.Decimal("12.34567")
	print(value)
	line = f"result: value:precision"
	print(line)
	line = f"value:03.3f"
	print(line)

	# 格式化输出日期字符串
	today = datetime(year=2023, month=2, day=1)
	line = f"today:%Y%m%d" # 20230201
	print(line)

	# 数值数值的十六进制
	number = 1024
	line = f"number:#0x" # 0x400
	print(line)
	line = f"number:b" # 10000000000
	print(line)


	# object, 字符串里如果是引用属性,不要使用"双引号
	o1 = "name": "product.id","value": 23
	line = f"Json name is o1['name']"
	print(line)

	# 输出大括号本身
	line = f" \\" and "
	print(line)

	print("==== TestFormatStringLiterals END ====")

if __name__ == '__main__':
	print("hello world!")
	TestPrecentSignFormat()
	TestStringFormat()
	TestFormatStringLiterals()

输出

hello world!
==== TestPrecentSignFormat BEGIN ====
Hi,,Hello World
https://blog.csdn.net/infoworld
hex is 40d or 40D
Decimal is 1037
Float is 1037.00
==== TestPrecentSignFormat END ====
==== TestStringFormat BEGIN ====
1,2,0
0,1,2
22,33,11
20230201
1023.20
Coordinates: 37.24N, -115.81W
==== TestStringFormat END ====
==== TestFormatStringLiterals BEGIN ====
My name is Tobey or Tobey or 'Tobey' or 'Tobey'
12.34567
result: 12.34567
12.346
20230201
0x400
10000000000
Json name is product.id
 " and 
==== TestFormatStringLiterals END ====

参考

  1. Built-in Types

  2. string — Common string operations

  3. Lexical analysis

  4. Python字符串格式化的三种方式

以上是关于[Python]_[初级]_[字符串格式化的三种方法]的主要内容,如果未能解决你的问题,请参考以下文章

python_常用内置模块

Python 列表(List) 的三种遍历(序号和值)方法

python对mysql数据库操作的三种不同方式

php获取POST数据的三种方法

python的三种特性

JDBC连接Oracle的三种URL格式SIDSERVICENAMETNS