7

私は現在このようなコードを持っています:

cache = 1
def foo():
    global cache
    # many
    # lines
    # of code
    cache = 2

ただし、これは将来、見つけにくいバグにつながる可能性があります。これは、読者がglobal cache上のどこかに表示されることに気付かない可能性があるためcache = 2です。または、寄稿者が誤ってを追加したり、追加def bar(): cache = 2し忘れたりする場合がありglobal cacheます。

この落とし穴をどのように回避できますか?

4

4 に答える 4

17
class Cache:
     myvar = 1

def foo():
    Cache.myvar = 2

このように、Cache.myvar実質的に「グローバル」です。どこからでも読み書きが可能です。

変数名のオートコンプリートが可能になるため、辞書の代替案よりもこれを好みます。

于 2013-01-03T08:45:12.130 に答える
8
cache = 1
def foo():
    return 2
cache = foo()

また

d = {'cache': 1}
def foo(x):
    x['cache'] = 2
foo(d)
于 2013-01-03T08:31:34.200 に答える
3

「読者は、グローバル変数が更新されたと意図せずに考えるかもしれません」というのは、多くの落とし穴ではありません。あなたはあなたのコードを読んでいる人々がPythonがどのように機能するかを知っていることを期待しなければなりません。さらに明確にしたい場合は、コメントを使用してください。それが彼らの目的です。

于 2013-01-03T08:33:43.973 に答える
2

グローバル変数を使用することは、プログラミングの良い習慣ではありません。変数を引数として渡します。make関数は何かを返し、それを別の関数で使用します。関数は、Pythonの動作方法である変数に割り当てることができます。

于 2013-01-03T08:50:52.743 に答える