def do_something():
print 'doing something...'
def maybe_do_it(hesitant=False):
if hesitant:
do_something = lambda: 'did nothing'
result = do_something()
print result
maybe_do_it()
このコードの結果は次のとおりです。
File "scope_test.py", line 10, in <module>
maybe_do_it()
File "scope_test.py", line 7, in maybe_do_it
result = do_something()
UnboundLocalError: local variable 'do_something' referenced before assignment
しかし、このコードは期待どおりに「何かをしました...」と出力します。
def do_something():
print 'doing something...'
def maybe_do_it(hesitant=False):
result = do_something()
print result
maybe_do_it()
if ステートメント内の条件が実行されなかったにもかかわらず、関数はどのようにオーバーライドされたのでしょうか? これは Python 2.7 で発生します -- Python 3 でも同じですか?