占位符
python语言提供了print
内建函数,可以用来打印运行过程中的一些信息,是比较简单原始的调试方法,也是常用的一种
注意,
f
,从c语言转过来的要注意
类似其他语言,python对字符串也提供了占位符的特性,以方便字符串的格式输出
python中点位符如下
image.png
字符串格式化
在python中字符串格式化有以下几种方式可以实现
使用点位符
这是一种引入最早的一种,也是比较容易理解的一种方式
使用方式为:
- 格式化字符串中变化的部分使用占位符
- 变量以元组形式提供
- 变量与格式化字符串之间以
%
连接
例如:
>>> a = 'test'
>>> print('this is %s' % a)
this is test
>>> b = 1
>>> print('a = %s, b = %d' % (a, b))
a = test, b = 1
>>>
内建函数format
format
是string模块的一个内建函数,使用方法为str.format(args)
这种方式下,格式化字符串中变量部分通过{}
来占位,具体的值通过format
函数的参数args
提供,有以下几种方式
- 根据参数位置顺序对应
>>> print('a = {}, b = {}'.format(a, b)) a = test, b = 1 >>>
- 通过参数位置标号来对应
>>> print('b = {1}, a = {0}'.format(a, b)) b = 1, a = test >>>
- 通过参数名字对应
>>> print('b = {1}, a = {0}, server = {server}'.format(a, b, server='www.jianshu.com')) b = 1, a = test, server = www.jianshu.com >>>
- 根据元组元素对应
>>> print('b = {0[1]}, a = {0[0]}, c = {1[0]}, d = {1[1]}'.format((a, b),(3, 4))) b = 1, a = test, c = 3, d = 4 >>>
说明:
[]
内为元组元素下标,[]
前面的数字为元组做为参数的位置
如果需要将结果进行对齐等操作,可以在{}
中使用:
,前面的是位置等参数,后面的对齐等符号,
先看几个例子
>>> print('a = {:.2f}'.format(1.324))
a = 1.32
>>> print('a = {:.10f}'.format(1.324))
a = 1.3240000000
>>> print('a = {:*^10}'.format(1.324))
a = **1.324***
>>> print('a = {:*^10}'.format('test'))
a = ***test***
>>> print('a = {:*^4}'.format('test'))
a = test
>>>
说明:
{:1234}
- 填充符/精度符,如上面例子中的
*
当变量结果不够显示时,就使用填充符进行填充剩余位置;例子中的.
表示数字的精度符,位数不够显示时会用0填充- 对齐符,
^
、<
、>
分别是居中、左对齐、右对齐- 是一个数字,表示显示的结果中的字符个数,包含分隔符;如果前面是一个
.
,此数字表示保留几位小数- 当变量是数字是,表示数字的类型
string模块的Template
这是string模块提供的一个模板类,默认使用$
或者${}
(建议使用这个)来占位,而不是%
;
具体用法如下:
>>> from string import Template
>>> s='hi ${name}'
>>> t = Template(s)
>>> t.substitute(name='alex')
'hi alex'
>>>
Template还有一个safe_substitute
函数,当格式化字符串中有变量未给出值时,此函数将占位符当成字符串输出,而substitute会报错
>>> s1 = 'hi ${name}, ${age}'
>>> t = Template(s1)
>>> t.substitute(name='alex')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.8/string.py", line 126, in substitute
return self.pattern.sub(convert, self.template)
File "/usr/local/lib/python3.8/string.py", line 119, in convert
return str(mapping[named])
KeyError: 'age'
>>> t.safe_substitute(name='alex')
'hi alex, ${age}'
>>>
当需要输出一个$
符号时,可以使用$$
>>> s1 = 'hi ${name}, have $$100'
>>> t = Template(s1)
>>> t.substitute(name='alex')
'hi alex, have $100'
>>>
用户自定义Template
Template是一个类,用户可以从此类中派生子类,来实现更为自定义的功能,例如将占位符$
改为%
>>> class MyTemplate(Template):
... delimiter = '%'
...
>>> s = 'hi %{name}, have $100'
>>> t = MyTemplate(s)
>>> t.substitute(name='alex')
'hi alex, have $100'
>>>
同理,这个时候想输出一个%
,就需要使用%%
来转义
>>> s = 'hi %{name}, have $100 100%%'
>>> t = MyTemplate(s)
>>> t.substitute(name='alex')
'hi alex, have $100 100%'
>>>
f-string
由python3.6版本引入的一个特性,称之为字面量格式化字符串,f-string 格式化字符串以f
或者F
开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去。
先看一个例子
>>> name = 'lucy'
>>> print(f'my name is {name}')
my name is lucy
>>>
f-string不同于前几种方式,这种方式有很多好用的特性,如下
- 在
{}
中可以做表达求值>>> a = 1 >>> b = 2 >>> print(f'a + b = {a+b}') a + b = 3 >>>
- 在
{}
中可以调用函数>>> name = 'lucy' >>> print(f'my name is {name.upper()}') my name is LUCY >>>
- 在
{}
中使用‘
或者”
保证{}
内外使用的不一样即可,如下>>> print(f'test {"str"}') test str >>> print(f"test {'str'}") test str >>>
- 在
{}
中需要同时使用’
和“
,则需要外部字符串使用文档字符串符号’‘’
或者”“”
>>> print(f'''{"it's name"} is dododo''') it's name is dododo >>>
-
{}
想作为字符输出,有两种方式:使用{{
、}}
进行转换;将{}
放到字符串中,如下>>> print(f'{{}}') {} >>> print(f'{"{}"}') {} >>>
-
{}
中不允许出现\
即使作为函数参数;必须使用的话,可以将包含\
的内容放到一个变量里,如下>>> f'print the {"\n"}' File "<stdin>", line 1 SyntaxError: f-string expression part cannot include a backslash >>> newline='\n' >>> f'print the {newline}' 'print the \n' >>> >>>f'newline is: {ord('\n')}' File "<stdin>", line 1 f'newline is: {ord('\n')}' ^ SyntaxError: unexpected character after line continuation character >>> newline = ord('\n') >>> f'newline is: {newline}' 'newline is: 10' >>>
- f-string可以用于多行字符串,有两种方式:使用连接符
\
; 使用doc字符串,如下>>> f'My name is {name}, ' \ ... f'I\'m {age}' "My name is alex, I'm 27" >>> >>> f'''My name is {name}, ... I'm {age}''' "My name is alex, \nI'm 27" >>>
- 格式描述符
与format内置函数类似,使用格式{content:format}
;其中格式如果使用默认的可以省略:format
具体可以参考文章中自定义格式一节
网友评论