<p><a href="https://stackoverflow.com/questions/1663995/python-variable-assignment-and-if-statement/1664013#1664013">Alex's answer</a>上的变体:</p>
<pre><code>class DataHolder:
def __init__(self, value=None, attr_name='value'):
self._attr_name = attr_name
self.set(value)
def __call__(self, value):
return self.set(value)
def set(self, value):
setattr(self, self._attr_name, value)
return value
def get(self):
return getattr(self, self._attr_name)
save_data = DataHolder()
</code></pre>
<p>用法:</p>
<pre><code>if save_data(get_input()):
print save_data.value
</code></pre>
<p>或者,如果您喜欢其他接口:</p>
<pre><code>if save_data.set(get_input()):
print save_data.get()
</code></pre>
<p>我认为这有助于测试if-elif-elif-elif etc构造中的一系列正则表达式,如<a href="https://stackoverflow.com/questions/122277/how-do-you-translate-this-regular-expression-idiom-from-perl-into-python">this SO question</a>:</p>
<pre><code>import re
input = u'test bar 123'
save_match = DataHolder(attr_name='match')
if save_match(re.search('foo (\d+)', input)):
print "Foo"
print save_match.match.group(1)
elif save_match(re.search('bar (\d+)', input)):
print "Bar"
print save_match.match.group(1)
elif save_match(re.search('baz (\d+)', input)):
print "Baz"
print save_match.match.group(1)
</code></pre>