百分号如何应用于Python中的此方法?
在我学习Python的过程中,我发现了百分号(%)的两个用法。第一个用法是取余数,也就是它会把左边的数字和右边的数字相除,然后返回剩下的部分。
第二个用法是字符串格式化。比如我可以写 'Hi there %s' % name
,这里的name是一个名字的列表。
另外,如果你在字符串格式化中看到 %%
,那就是表示要插入一个实际的 %
符号。
接下来我有个问题,我发现了这个:
class FormatFormatStr(FormatObj):
def __init__(self, fmt):
self.fmt = fmt
def tostr(self, x):
if x is None: return 'None'
return self.fmt%self.toval(x)
那句 return self.fmt%self.toval(x)
是什么意思呢?它不能是取余数,因为 toval
会给我一个字符串。也不太像字符串格式化,因为没有另一个百分号。
还有,和这个相关的是:
def csvformat_factory(format):
format = copy.deepcopy(format)
if isinstance(format, FormatFloat):
format.scale = 1. # override scaling for storage
format.fmt = '%r'
return format
在 format.fmt = '%r'
中,百分号是什么意思?这是不是表示要插入一个像 repr()
那样的字符串?还是说它表示插入变量 r
代表的内容?在这个程序中,r
也指的是一个记录数组。
谢谢大家。希望这能让你们明白 =)
5 个回答
这段代码:
return self.fmt % self.toval(x)
这里的“%”运算符是用来格式化字符串的,正如你所猜的那样。
这个类接收一个格式字符串,里面包含了格式化的规则,当调用tostr(x)时,它会返回字符串 % x。
这就像直接使用“%”一样,只不过是把格式字符串保存起来,方便以后使用。换句话说,不用每次都写:
"I want to print the number: %n" % 20
发生的事情是:
format_str = "I want to print the number: %n"
x = 20
print format_str % x
这其实是完全一样的。
在
return self.fmt%self.toval(x)
self.fmt
是一个字符串,这个字符串里可能包含一个百分号的占位符。
格式字符串中的 %r
就像 %s
,但是它会打印出字符串的表示形式,也就是会带上引号和反斜杠等等。
%
只是一个运算符,其实就是一个方法,和其他方法一样,你可以传入一个具体的值或者一个包含值的变量。在你的例子中,他们使用的是一个包含格式字符串的变量。
字符串的 % 操作符比你想象的要简单。它左边是一个字符串,右边可以是各种东西。左边的部分不一定是固定的字符串,它可以是一个变量,或者是其他计算的结果。任何能得到字符串的表达式都可以放在 % 的左边。
在你的第一个例子中,self.fmt
是一个字符串。为了在这个上下文中有用,它里面应该有一个百分号。
在你的第二个例子中,format.fmt
被设置为一个适合放在 % 左边的字符串。在这种情况下,"%r" 的意思是把值的 repr()(表示形式)插入到字符串中,就像你说的那样。