Python - 成员函数在类中调用时的行为不同

时间:2015-08-11 17:37:35

标签: python class

我使用的是一个类成员函数,它在定义它的类中调用时的效果与在外部调用它时的效果不同。

def getLexid(self, senseKey):
    lexid = ""
    senseKeyParts = senseKey.split("%")
    if len(senseKeyParts) > 1:
        sense_number = senseKeyParts[1]
        # System.out.print("sense number: " + sense_number + '\n');
        senseNumParts = sense_number.split(":")
        if len(senseNumParts) > 1:
            lexid = senseNumParts[1]

    print("lexid:",lexid,"|")

    return lexid

这是内部呼叫:

def getLexname(self, senseKey):
    lexname = ""
    lexid = self.getLexid(senseKey).strip()
    print("Getting lexname with lexid:",senseKey,"(",lexid,")")
    print("Getting lexname with lexid:",senseKey.strip(),"(",lexid.strip(),")")

当我从外部调用getLexname时:

wordnet_obj = wordnet.WordNet()
lexname = wordnet_obj.getLexname('forester%1:18:00::')

我明白了:

lexid: 18 |
Getting lexname with lexid: forester%1:18:00:: ( 18 )
Getting lexname with lexid: forester%1:18:00:: ( 18 )

结果用空格填充,而.strip()似乎没有效果。 但是,当我从外部调用getLexid时:

wordnet_obj = wordnet.WordNet()
lexid2 = wordnet_obj.getLexid('forester%1:18:00::')
print("lexid2:",lexid2)

我得到了,正如所料:

('lexid:','18')

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

实际上您正在看到print的行为:

  

将对象打印到文本流文件,以sep分隔,然后结束。 sep,end和file(如果存在)必须作为关键字参数给出

默认情况下,分隔符(sep)是一个空格单个空格。

在您的示例中,您要比较两个不同的打印语句print('prefix', '18')print('(', '18', ')')的输出。

从外部调用的示例输出位开始,我收集到您正在使用Python 3.对于Python 3,您将得到:

>>> print('prefix', '18')  # This differs from your example maybe you had another pair of parentheses?
prefix 18
>>> print('(', '18', ')')  # Note the spaces around the number.
( 18 )

您可以通过指定空分隔符来更改行为:

>>> print('(', '18', ')', sep='')
(18)