これは確かにpython固有の質問ではありませんが、python固有の回答があれば探しています。多数の変数を含むコード ブロックを関数 (または同様のもの) に入れることです。このコードを想定してみましょう
##!/usr/bin/env python
# many variables: built in types, custom made objects, you name it.
# Let n be a 'substantial' number, say 47.
x1 = v1
x2 = v2
...
xn = vn
# several layers of flow control, for brevity only 2 loops
for i1 in range(ri1):
for i2 in range(ri2):
y1 = f1(i1,i2)
y2 = f2(i1,i2)
# Now, several lines of work
do_some_work
# involving HEAVY usage and FREQUENT (say several 10**3 times)
# access to all of x1,...xn, (and maybe y1,y2)
# One of the main points is that slowing down access to x1,...,xn
# will turn into a severe bottleneck for the performance of the code.
# now other things happen. These may or may not involve modification
# of x1,...xn
# some place later in the code, again, several layers of flow control,
# not necessarily identical to the first occur
for j1 in range(rj1):
y1 = g1(j1)
y2 = g2(j1)
# Now, again
do_some_work # <---- this is EXACTLY THE SAME code block as above
# a.s.o.
明らかに、「do_some_work」を関数のようなもの (またはもっと良いもの) に入れたいと思います。
Pythonでこれを行う最もパフォーマンスの高い方法は何ですか
紛らわしいほど多数の引数を伴う関数呼び出しなし
x1、...、xnにアクセスするためのパフォーマンスの損失のある間接性なし(たとえば、それらを別のリスト、クラスなどにラップすることによって)
関数 do_some_work(...) で x1,...,xn をグローバルとして使用せずに
私はいつも自分がグローバルに戻っていることを認めなければなりません。