Python 为什么可以';我不能在我的方法中只运行一行吗?

Python 为什么可以';我不能在我的方法中只运行一行吗?,python,Python,因此,作为游戏的一部分,我有一个动画文本窗口,每秒弹出并打印每个单词 这里的问题是“eachwordprint”方法在游戏中被反复调用,但我只想运行newmessage.text.split一次。我只是把它放在init中,但在游戏中,我在不同的时间更改字符串,所以每次更改字符串时我都需要拆分字符串 我试过了 if self.counter <=1: words = newmessage.text.split(' ') 如果self.counter您可以记忆分割的输出 MC = {

因此,作为游戏的一部分,我有一个动画文本窗口,每秒弹出并打印每个单词

这里的问题是“eachwordprint”方法在游戏中被反复调用,但我只想运行newmessage.text.split一次。我只是把它放在init中,但在游戏中,我在不同的时间更改字符串,所以每次更改字符串时我都需要拆分字符串

我试过了

if self.counter <=1:
    words = newmessage.text.split(' ')

如果self.counter您可以记忆分割的输出

MC = {}


def wrapper(fn):
    def inner(arg):
        if not MC.has_key(arg):
            MC[arg] = fn(arg)
        return MC[arg]
    return inner

@wrapper
def myfn(x):
    print x

myfn(1)
myfn(1)
myfn(2)
基本上,你是这样写你的文本分割函数的

@wrapper
def split(text):
    return text.split(' ')
每次需要拆分newmessage.text时,都将其称为拆分(newmessage.text)。包装器将首先检查文本是否已经遇到,如果已经遇到,则返回值,或者调用函数并将其拆分并存储以供以后使用


如果您的
newmessage
正在被不需要了解
NewLabel
实例的代码的其他部分修改,您可以在此处运行上述代码,我可能会创建一个类来封装
newmessage
行为:

class Message(object):
    def __init__(self, message):
        self.set_text(message)
    def set_text(self, message):
        self.text = message.split(' ')

newmessage = Message("this is a test hello. this is a test.")
然后将其作为传递给
NewLabel
的参数之一包含:

class NewLabel(ButtonBehavior, Label):
    def __init__(self, **kwargs):
        ...
        self.message = kwargs['message']

    def eachwordprint(self, *args):
        words = self.message.text
        print "counter: ", self.counter
        print "word length", len(words)
        ...
无论何时需要更改消息,您都可以执行以下操作:

newmessage.set_text('this is the new test')
但是,如果您总是在代码中知道您的
NewLabel
的部分设置消息文本,则只需将它们直接添加到
NewLabel
类:

class NewLabel(ButtonBehavior, Label):
    def __init__(self, **kwargs):
        ...
        self.set_text(kwargs['message'])

    def set_text(self, text):
        self.words = text.split(' ')

    def eachwordprint(self, *args):
        words = self.words
        print "counter: ", self.counter
        print "word length", len(words)
        ...

“这不管用”以什么方式?它不应该是self.words吗?你确定计数器变量一直在增加吗?你确定这是实际的代码吗
newmessage.text.split(“”)
无效,字符串上没有
text
属性。
newmessage
是否意味着是
NewLabel
的一个实例?
class NewLabel(ButtonBehavior, Label):
    def __init__(self, **kwargs):
        ...
        self.set_text(kwargs['message'])

    def set_text(self, text):
        self.words = text.split(' ')

    def eachwordprint(self, *args):
        words = self.words
        print "counter: ", self.counter
        print "word length", len(words)
        ...