以下主要是针对Python3中字符串格式化、/执行字符串语句介绍和示例。
字符串格式化
之前我们接触过简单的字符串格式化方法,通过转换说明符%标记转换内容的位置,然后通过操作符%,将后方的内容转换到标记的位置。
实际上,转换说明符的组成包括:%[转换标志:+,-,”,0][最小字段宽度][.精度值]转换类型
%:转换说明符的开始的标记
转换标志(可选):-表示左对齐;+表示转换后的内容前方加上正负号;’ ‘(空格)表示正数前方保留一个空格;0表示如果转换位置位数不够时,用0填充。
最小字段宽度(可选):转换后字段的最小宽度,如果不足自动用空格补齐;如果最小字段宽度值为“*”,则从元组中读取。
.精度值:如果转换内容为数字,精度值表示保留的小数位数;如果转换内容为字符串,精度值表示最大宽度。
转换类型:
i/d:带符号的十进制整数
o:不带符号的八进制
u:不带符号的十进制
x/X:不带符号的十六进制(x为小写,X为大写)
e/E:科学计数法的浮点数(e为小写,E为大写)
f/F:十进制浮点数
g/G:指数大于等于-4但小于精度值时,等同于f/F;否则,等同于e/E。
C:单字符(整数或单个字符)
r:字符串(非字符串时自动使用repr函数转换)
s:字符串(非字符串时自动使用str函数转换)
%:取消%转义(输出一个“%”字符)
接下来,我们看一些示例代码,加深理解。
示例代码:(最小字段宽度)
print('%2s' % 123456,'/',sep='') # 最小字段宽度(超过长度)
print('%8s' % 123456,'/',sep='') # 最小字段宽度(长度不足)
print('%*s' % (8,123456),'/',sep='') # 最小字段宽度(*)
# 显示输出结果为:123456/
# 显示输出结果为: 123456/
# 显示输出结果为: 123456/
示例代码:(.精度值)
print('%.2f' % 3.14159) # 精度值(浮点数)
print('%.2s' % '3.14159') # 精度值(字符串)
# 显示输出结果为:3.14
# 显示输出结果为:3.
示例代码:(转换标志)
print('%8.2f' % 3.14159,'/',sep='') # 未左对齐
print('%-8.2f' % 3.14159,'/',sep='') # 左对齐
# 显示输出结果为: 3.14/
# 显示输出结果为:3.14 /
print('%+d是一个正数' % 666) # 加号
print('%+d是一个负数' % -666) # 加号
# 显示输出结果为:+666是一个正数
# 显示输出结果为:-666是一个负数
print('% d是一个正数' % 666) # 空格
print('% d是一个负数' % -666) # 空格
# 显示输出结果为: 666是一个正数
# 显示输出结果为:-666是一个正数
print('%08d是一个8位数' % 666) # 填充0
# 显示输出结果为:00000666是一个8位数
执行字符串语句
如果想在Python中动态的执行一些代码,我们可以使用内置函数exec()和eval()。
示例代码:
exec('print(\'语句被执行了!\')')
上方代码会执行print语句。
但是,这样执行语句会有不安全因素。
示例代码:(异常示例)
exec('len=1')
len('abc')
上方代码,因为执行了语句len=1,导致内置函数len()失效,从而程序抛出异常。
TypeError: ‘int’ object is not callable
类型错误:整数对象不能调用
显然,这样执行字符串中的语句非常不安全。
我们可以把执行字符串代码的语句放在字典中,让字符串代码具有独立的作用域(命名空间)。
示例代码:
scope = {}
exec('len=1', scope)
print(scope.keys()) # 显示输出结果为:dict_keys(['__builtins__', 'len'])
print(scope['len']) # 显示输出结果为:1
print(len('abc')) # 显示输出结果为:3
当然,也可以执行其他语句,比如一个计算字符串长度的语句。
示例代码:
scope = {}
exec('code=len(\'小楼喜欢苍老师!\')', scope)
print(scope.keys()) # 显示输出结果为:dict_keys(['__builtins__', 'code'])
print(scope['code']) # 显示输出结果为:8
exec()函数可以执行语句,而eval()函数可以计算表达式。
示例代码:
scope = {'x':3,'y':6}
print(eval('x*y', scope))# 显示输出结果为:18
函数说明
如果想为函数添加说明文档,除了使用“#”进行注释,还可以在def语句后面直接写入说明字符串。
def get_area(width, height):
'这是一个计算面积的函数。'
return width * height
当一个函数添加了文档,我们可以通过调用函数的__doc__属性查看文档。
print(get_area.__doc__) # 显示输出结果为:这是一个计算面积的函数。
而且,我们还可以使用内置函数help()进行查看。
help(get_area)
上方这句代码会显示输出以下结果:
Help on function get_area in module __main__:
get_area(width, height)
这是一个计算面积的函数。