Xiaosong Chen wrote: > In C, it's a common pattern to use temporary variables in an lexical > scope to prevent the global scope from getting dirty. > For example, > > ```C > int a[N]; > for (int i = 0; i < N; i++) { > int temp = ... > a[i] = ... // something got from temp > } > // temp do not exists here > ``` > > But in python, such a pattern seems impossible. An straightforward > translation should be like this: > > ```python > a = [] > for i in range(N): > temp = ... > a.append(...)# something got from temp > # temp DO EXISTS here, will be the value of the last iteration > ``` > > As in the comment, the temporary variable remains existing after the > block. How do you usually deal with this?
I put the code into a function def create_a(n): result = [] for i in range(n): temp = ... result.append(...) return result a = create_a(N) At this point you could delete the function del create_a but in practice I never do that. If you want to go fancy you can rewrite the above as def replace_with_result(*args, **kw): def call(f): return f(*args, **kw) return call @replace_with_result(N) def a(n): result = [] for i in range(n): temp = ... result.append(...) return result which will immediately overwrite the function a() with the result of the a(N) call -- but I prefer to keep the function around. The extra memory is usually negligible, and writing unit tests to detect blunders in create_a() is always a good idea, as trivial as it might appear on first sight... _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor