2

从我对 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)意思?它不能是模数,因为tova我会给我一个字符串。它不是真正的字符串格式化程序,因为没有另一个百分号。

此外,与此相关:

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'这是否意味着插入一个字符串 a la repr()?或者这是否意味着插入变量r代表的内容?r在这个整体方案中也指recarray。

谢谢大家。希望这是有道理的=)

4

5 回答 5

4

字符串 % 运算符比您想象的要简单。左边是一根绳子,右边是各种各样的东西。左侧不一定是文字字符串,它可以是变量,也可以是另一个计算的结果。任何产生字符串的表达式都对 % 的左侧有效。

在您的第一个示例中,self.fmt是一个字符串。为了在这种情况下有用,它应该有一个百分号。

在您的第二个示例中,format.fmt被设置为一个字符串,该字符串可用作 % 的左侧。在这种情况下,“%r”表示将值的 repr() 插入到字符串中,如您所说。

于 2009-09-27T20:24:06.717 回答
3

return self.fmt%self.toval(x)

self.fmt是一个字符串,并且该字符串中可能有一个百分号占位符。

%r在格式字符串中就像%s但它打印repr()字符串的,所以它会有引号和反斜杠等等。

%只是一个运算符,它只是一个方法,并且像任何其他方法一样,您可以传入文字值或包含值的变量。在您的示例中,他们使用包含格式字符串的变量。

于 2009-09-27T20:25:16.743 回答
0
def tostr(self, x):
    if x is None: return 'None'
    return self.fmt%self.toval(x)

%绝对是一个字符串格式化程序。将方法传递tostr给格式化程序,例如,"%s"或者"%r"看看会发生什么

我认为'%r'incsvformat_factory也是一个字符串格式化程序。 '%r'表示采取repr()这是一种向用户显示某些内容的合理方式。我想这format.fmt是在其他地方使用的format.fmt % somevalue

于 2009-09-27T20:24:28.557 回答
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

这是完全相同的事情。

于 2009-09-27T20:25:16.480 回答
0

% 在字符串格式化中有不止一种用途。一种用途是在 %s、%d 等中。

另一个用途是将“我们使用 %d 和 %s 的字符串”与 int-value 和 string-value 分开。

例如

'string in which we use %d and %s' % (17, 'blue')

会导致

'string in which we use 17 and blue'

我们可以将“使用 %d 和 %s 的字符串”存储在一个变量中,

a = 'string in which we use %d and %s'

然后

a % (17, 'blue')

结果是

'string in which we use 17 and blue'

在您的示例中 self.fmt%self.toval(x)

self.fmt 与上述类似,self.toval(x) 为 (17, 'blue')

于 2009-09-27T20:27:03.267 回答