作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
'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
.
然后您可以为属性函数中的逻辑选择三个合理的选择:
您还有另一种选择,即以与上述大致相同的方式在 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/
我是一名优秀的程序员,十分优秀!