python格式化字符串的三种方法(%,format,f-string)

1.%格式化字符串
%格式化字符串是python最早的,也是能兼容所有版本的一种字符串格式化方法,在一些python早期的库中,建议使用%格式化方式,他会把字符串中的格式化符按顺序后面参数替换

格式是:"xxxxxx %s xxxxxx  %s " % (value1, value2)

用法解释:

1.其中 %s就是格式化符,意思是把后面的值格式化为字符类型,类似的格式化符还有%d,%f等,具体参考文章Python字符串格式化。
2.后面的value1,value2就是要格式化的值,不论是字符还是数值,都会被格式化为格式化符对应的类型。
3.当然可以不用以元组的形式传值,你可以直接写这样:"xxxxx %s" % value,不过不建议这样写,一是应为这样只能传递一个参数,二是如果value是元组或列表等类型,这样会触发TypeErrer。
4.如果只传一个参数,并且很确定参数类型不会触发异常,可以使用上面的写法,否则,我建议你提供一个单元素元组,就像"xxxx %s " % (value,)。

# 通过占位的形式,完成拼接
name = "考研加油"
message = "同学们: %s" % name
print(message)
 
# 通过占位的形式,完成数字和字符串的拼接
class_num = 1
avg_salary = 16781
message = "Python大数据学科,北京%s期,毕业平均工资: %s" % (class_num,avg_salary)
print(message)
 
name="传智播客"
setup_year = 2006
stock_price = 19.99
message = "%s, 成立于: %d,我今天的股价是: %f" % (name, setup_year, stock_price)
print(message)

2.format()
       %虽然强大,但用起来难免有些麻烦,代码也不是特别美观,因此,在python 2.5 之后,提供了更加优雅的str.format()方法。

format()的常用用法:str.format()------使用{}和:来代替之前的%

"{:.2f}".format(3.45678)

"%.2f"%(3.45678)

f的常用方法:f"xxxx {}  xxxx {}"  {}里面可以写名称占位符

# 使用名称占位符
s2 = "xxxx {age} xxxx {name}".format(age=18, name="hangman")
print(s2)  # xxxx 18 xxxx hangman
 
# 使用序号占位符,为空默认从左到右01234.。。
s3 = "xxxx {1} xxx{0}".format(value1,value2)
print(s3)  # xxxx [9, 0] xxx(7, 8)
 
# 也可以混合使用
s4 = "xxxx {} XXX {name} xxx {}".format(value2,value1,name="s4")
print(s4)  # xxxx [9, 0] XXX s4 xxx (7, 8)


name ="传智播客"
set_up_year = 2006
stock_price = 19.99
# f: format
print(f"我是{name},我成立于:{set_up_year}年,我今天的股价是: {stock_price}")
print("1 *1 的结果是:%d" % (1 * 1))
print(f"1 *2的结果是:{1 * 2}")
print("字符串在Python中的类型名是:%s" % type("字符串"))
>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'
 
>>> "{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'
 
>>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
 
# 通过字典设置参数
site = {"name": "菜鸟教程", "url": "www.runoob.com"}
print("网站名:{name}, 地址 {url}".format(**site))
 
# 通过列表索引设置参数
my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的

>>> print("{:.2f}".format(3.1415926))
3.14
数字格式输出描述
3.1415926{:.2f}3.14

保留小数点后两位

2.71828{:.0f}3不带小数(数字格式化是四舍五入)
0.25{:.2%}25.00%百分比格式

2.字符串格式化练习题
股价计算小程序
定义如下变量:
.name,公司名
stock_price,当前股价 stock_code,股票代码
.stock_price_daily_growth_factor,股票每日增长系数,浮点数类型,比如1.2.growth_days,增长天数
计算,经过growth_days天的增长后,股价达到了多少钱
使用字符串格式化进行输出,如果是浮点数,要求小数点精度2位数。

# 定义需要的变量
name = "传智播客"
stock_price = 19.99
stock_code = "003032"
# 股票价格每日增长因子
stock_price_daily_growth_factor = 1.2
growth_days = 7
finally_stock_price = stock_price * stock_price_daily_growth_factor ** growth_days
 
print(f"公司: {name},股票代码: {stock_code},当前股价:{stock_price}")
print("每日增长系数: %.1f,经过%d天的增长后,股价达到了:%.2f" % (stock_price_daily_growth_factor, growth_days,finally_stock_price))


3.总结
       python最先的格式化字符串方法是%,但他的致命缺点是支持的类型有限,只支持int,str,double,其他所有类型只能转换为这几个类型,还有如果传递的是元组,那么必须还要传入一个单值元组,为此,添加了str.format()以解决%-formatting中的一些问题,特别是,它使用普通函数调用语法(并因此支持多个参数),并且可以通过__format __()方法在被转换为字符串的对象上进行扩展。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>