gpt4 book ai didi

python - Python 类属性上的 While 循环

转载 作者:行者123 更新时间:2023-11-28 20:51:29 24 4
gpt4 key购买 nike

'while' 不会 'break' whenself.text 被 kill 函数设置为 ''。

有人可以帮助我完成这项工作或提出更好的方法吗?需要通过 10 多个函数运行一个字符串,如果字符串变成 ''在每个函数内部返回似乎是多余的。

class Class(object):
def run(self, text):
self.text = text

while self.text:
self.nothing1()
self.kill()
self.nothing2()
return self.text # stop if all functions run

def nothing1(self):
print 'nothing1'
self.text = self.text

def kill(self):
print 'kill'
self.text = ''

def nothing2(self):
print 'nothing2'
self.text = self.text

C = Class()
C.run('some string')

澄清:目标是通过许多函数运行一个字符串,以便在任何一个函数将字符串设置为“”时停止一次,我显然误解了'while'是如何工作的,这对我来说似乎是最干净的方法。

最佳答案

更新 2:如果您的目标是通过多个函数运行一个字符串,那么您的设计基本上是错误的。

每个函数不应该设置一个成员,而是接受一个字符串,并返回一个字符串。然后,您的循环应测试该值是否正确:

currstr = 'foo'
for f in (self.nothing1, self.kill, self.nothing2):
tmpstr = f(currstr)
if not tmpstr: break # or return, or raise exception
currstr = tmpstr

更新:显然您的问题是您不喜欢 while 循环的工作方式。 While 循环仅在执行遇到测试时中断 - 也就是说,一旦执行进入主体,没有中断或异常,它将继续到 block 的末尾,然后才会重新评估测试。

可能最干净的方法是用 property 包装 self.text .

然后您可以为属性函数中的逻辑选择三个合理的选择:

  1. 您可以创建一个在属性更改时调用的处理程序系统,并在那里做任何您喜欢的事情(包括接下来两个选项之一的逻辑);
  2. 包括针对空字符串的特定测试,并引发异常,并在循环外处理它;或
  3. 在每次更改时引发异常,并在循环中处理它。

您还有另一种选择,即以与上述大致相同的方式在 kill 中引发异常。


您的代码非常适合我:

In [139]: cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:class Class(object):
: def run(self, text):
: self.text = text
:
: while self.text:
: self.nothing1()
: self.kill()
: self.nothing2()
:
: def nothing1(self):
: print 'nothing1'
: self.text = self.text
:
: def kill(self):
: print 'kill'
: self.text = ''
:
: def nothing2(self):
: print 'nothing2'
: self.text = self.text
:
:C = Class()
:C.run('some string')
:--
nothing1
kill
nothing2

关于python - Python 类属性上的 While 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9621283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com