百分号如何应用于Python中的此方法?

2 投票
5 回答
1283 浏览
提问于 2025-04-15 14:38

在我学习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 个回答

0

这段代码:

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

这其实是完全一样的。

3

return self.fmt%self.toval(x)

self.fmt 是一个字符串,这个字符串里可能包含一个百分号的占位符。

格式字符串中的 %r 就像 %s,但是它会打印出字符串的表示形式,也就是会带上引号和反斜杠等等。

% 只是一个运算符,其实就是一个方法,和其他方法一样,你可以传入一个具体的值或者一个包含值的变量。在你的例子中,他们使用的是一个包含格式字符串的变量。

4

字符串的 % 操作符比你想象的要简单。它左边是一个字符串,右边可以是各种东西。左边的部分不一定是固定的字符串,它可以是一个变量,或者是其他计算的结果。任何能得到字符串的表达式都可以放在 % 的左边。

在你的第一个例子中,self.fmt 是一个字符串。为了在这个上下文中有用,它里面应该有一个百分号。

在你的第二个例子中,format.fmt 被设置为一个适合放在 % 左边的字符串。在这种情况下,"%r" 的意思是把值的 repr()(表示形式)插入到字符串中,就像你说的那样。

撰写回答