Kaydet (Commit) e0d4972a authored tarafından Raymond Hettinger's avatar Raymond Hettinger

Replaced .keys() with dictionary iterators

üst 1fab9ee0
...@@ -234,8 +234,8 @@ d[types.TupleType] = _deepcopy_tuple ...@@ -234,8 +234,8 @@ d[types.TupleType] = _deepcopy_tuple
def _deepcopy_dict(x, memo): def _deepcopy_dict(x, memo):
y = {} y = {}
memo[id(x)] = y memo[id(x)] = y
for key in x.keys(): for key, value in x.iteritems():
y[deepcopy(key, memo)] = deepcopy(x[key], memo) y[deepcopy(key, memo)] = deepcopy(value, memo)
return y return y
d[types.DictionaryType] = _deepcopy_dict d[types.DictionaryType] = _deepcopy_dict
if PyStringMap is not None: if PyStringMap is not None:
...@@ -335,8 +335,8 @@ def _test(): ...@@ -335,8 +335,8 @@ def _test():
def __getstate__(self): def __getstate__(self):
return {'a': self.a, 'arg': self.arg} return {'a': self.a, 'arg': self.arg}
def __setstate__(self, state): def __setstate__(self, state):
for key in state.keys(): for key, value in state.iteritems():
setattr(self, key, state[key]) setattr(self, key, value)
def __deepcopy__(self, memo = None): def __deepcopy__(self, memo = None):
new = self.__class__(deepcopy(self.arg, memo)) new = self.__class__(deepcopy(self.arg, memo))
new.a = self.a new.a = self.a
......
...@@ -228,8 +228,8 @@ class dircmp: ...@@ -228,8 +228,8 @@ class dircmp:
def phase4_closure(self): # Recursively call phase4() on subdirectories def phase4_closure(self): # Recursively call phase4() on subdirectories
self.phase4() self.phase4()
for x in self.subdirs.keys(): for sd in self.subdirs.itervalues():
self.subdirs[x].phase4_closure() sd.phase4_closure()
def report(self): # Print a report on the differences between a and b def report(self): # Print a report on the differences between a and b
# Output format is purposely lousy # Output format is purposely lousy
...@@ -258,15 +258,15 @@ class dircmp: ...@@ -258,15 +258,15 @@ class dircmp:
def report_partial_closure(self): # Print reports on self and on subdirs def report_partial_closure(self): # Print reports on self and on subdirs
self.report() self.report()
for x in self.subdirs.keys(): for sd in self.subdirs.itervalues():
print print
self.subdirs[x].report() sd.report()
def report_full_closure(self): # Report on self and subdirs recursively def report_full_closure(self): # Report on self and subdirs recursively
self.report() self.report()
for x in self.subdirs.keys(): for sd in self.subdirs.itervalues():
print print
self.subdirs[x].report_full_closure() sd.report_full_closure()
def cmpfiles(a, b, common, shallow=1, use_statcache=0): def cmpfiles(a, b, common, shallow=1, use_statcache=0):
......
...@@ -553,7 +553,7 @@ def getclasstree(classes, unique=0): ...@@ -553,7 +553,7 @@ def getclasstree(classes, unique=0):
if unique and parent in classes: break if unique and parent in classes: break
elif c not in roots: elif c not in roots:
roots.append(c) roots.append(c)
for parent in children.keys(): for parent in children:
if parent not in classes: if parent not in classes:
roots.append(parent) roots.append(parent)
return walktree(roots, children, None) return walktree(roots, children, None)
......
...@@ -24,11 +24,11 @@ def getcaps(): ...@@ -24,11 +24,11 @@ def getcaps():
continue continue
morecaps = readmailcapfile(fp) morecaps = readmailcapfile(fp)
fp.close() fp.close()
for key in morecaps.keys(): for key, value in morecaps.iteritems():
if not key in caps: if not key in caps:
caps[key] = morecaps[key] caps[key] = value
else: else:
caps[key] = caps[key] + morecaps[key] caps[key] = caps[key] + value
return caps return caps
def listmailcapfiles(): def listmailcapfiles():
......
...@@ -386,12 +386,11 @@ class Profile: ...@@ -386,12 +386,11 @@ class Profile:
def snapshot_stats(self): def snapshot_stats(self):
self.stats = {} self.stats = {}
for func in self.timings.keys(): for func, (cc, ns, tt, ct, callers) in self.timings.iteritems():
cc, ns, tt, ct, callers = self.timings[func]
callers = callers.copy() callers = callers.copy()
nc = 0 nc = 0
for func_caller in callers.keys(): for callcnt in callers.itervalues():
nc = nc + callers[func_caller] nc += callcnt
self.stats[func] = cc, nc, tt, ct, callers self.stats[func] = cc, nc, tt, ct, callers
......
...@@ -142,7 +142,7 @@ class Stats: ...@@ -142,7 +142,7 @@ class Stats:
self.total_calls += other.total_calls self.total_calls += other.total_calls
self.prim_calls += other.prim_calls self.prim_calls += other.prim_calls
self.total_tt += other.total_tt self.total_tt += other.total_tt
for func in other.top_level.keys(): for func in other.top_level:
self.top_level[func] = None self.top_level[func] = None
if self.max_name_len < other.max_name_len: if self.max_name_len < other.max_name_len:
...@@ -150,12 +150,12 @@ class Stats: ...@@ -150,12 +150,12 @@ class Stats:
self.fcn_list = None self.fcn_list = None
for func in other.stats.keys(): for func, stat in other.stats.iteritems():
if func in self.stats: if func in self.stats:
old_func_stat = self.stats[func] old_func_stat = self.stats[func]
else: else:
old_func_stat = (0, 0, 0, 0, {},) old_func_stat = (0, 0, 0, 0, {},)
self.stats[func] = add_func_stats(old_func_stat, other.stats[func]) self.stats[func] = add_func_stats(old_func_stat, stat)
return self return self
# list the tuple indices and directions for sorting, # list the tuple indices and directions for sorting,
...@@ -178,7 +178,7 @@ class Stats: ...@@ -178,7 +178,7 @@ class Stats:
if not self.sort_arg_dict: if not self.sort_arg_dict:
self.sort_arg_dict = dict = {} self.sort_arg_dict = dict = {}
bad_list = {} bad_list = {}
for word in self.sort_arg_dict_default.keys(): for word, tup in self.sort_arg_dict_default.iteritems():
fragment = word fragment = word
while fragment: while fragment:
if not fragment: if not fragment:
...@@ -186,9 +186,9 @@ class Stats: ...@@ -186,9 +186,9 @@ class Stats:
if fragment in dict: if fragment in dict:
bad_list[fragment] = 0 bad_list[fragment] = 0
break break
dict[fragment] = self.sort_arg_dict_default[word] dict[fragment] = tup
fragment = fragment[:-1] fragment = fragment[:-1]
for word in bad_list.keys(): for word in bad_list:
del dict[word] del dict[word]
return self.sort_arg_dict return self.sort_arg_dict
...@@ -213,8 +213,7 @@ class Stats: ...@@ -213,8 +213,7 @@ class Stats:
connector = ", " connector = ", "
stats_list = [] stats_list = []
for func in self.stats.keys(): for func, (cc, nc, tt, ct, callers) in self.stats.iteritems():
cc, nc, tt, ct, callers = self.stats[func]
stats_list.append((cc, nc, tt, ct) + func + stats_list.append((cc, nc, tt, ct) + func +
(func_std_string(func), func)) (func_std_string(func), func))
...@@ -234,14 +233,13 @@ class Stats: ...@@ -234,14 +233,13 @@ class Stats:
oldstats = self.stats oldstats = self.stats
self.stats = newstats = {} self.stats = newstats = {}
max_name_len = 0 max_name_len = 0
for func in oldstats.keys(): for func, (cc, nc, tt, ct, callers) in oldstats.iteritems():
cc, nc, tt, ct, callers = oldstats[func]
newfunc = func_strip_path(func) newfunc = func_strip_path(func)
if len(func_std_string(newfunc)) > max_name_len: if len(func_std_string(newfunc)) > max_name_len:
max_name_len = len(func_std_string(newfunc)) max_name_len = len(func_std_string(newfunc))
newcallers = {} newcallers = {}
for func2 in callers.keys(): for func2, caller in callers.iteritems():
newcallers[func_strip_path(func2)] = callers[func2] newcallers[func_strip_path(func2)] = caller
if newfunc in newstats: if newfunc in newstats:
newstats[newfunc] = add_func_stats( newstats[newfunc] = add_func_stats(
...@@ -251,7 +249,7 @@ class Stats: ...@@ -251,7 +249,7 @@ class Stats:
newstats[newfunc] = (cc, nc, tt, ct, newcallers) newstats[newfunc] = (cc, nc, tt, ct, newcallers)
old_top = self.top_level old_top = self.top_level
self.top_level = new_top = {} self.top_level = new_top = {}
for func in old_top.keys(): for func in old_top:
new_top[func_strip_path(func)] = None new_top[func_strip_path(func)] = None
self.max_name_len = max_name_len self.max_name_len = max_name_len
...@@ -263,14 +261,13 @@ class Stats: ...@@ -263,14 +261,13 @@ class Stats:
def calc_callees(self): def calc_callees(self):
if self.all_callees: return if self.all_callees: return
self.all_callees = all_callees = {} self.all_callees = all_callees = {}
for func in self.stats.keys(): for func, (cc, nc, tt, ct, callers) in self.stats.iteritems():
if not func in all_callees: if not func in all_callees:
all_callees[func] = {} all_callees[func] = {}
cc, nc, tt, ct, callers = self.stats[func] for func2, caller in callers.iteritems():
for func2 in callers.keys():
if not func2 in all_callees: if not func2 in all_callees:
all_callees[func2] = {} all_callees[func2] = {}
all_callees[func2][func] = callers[func2] all_callees[func2][func] = caller
return return
#****************************************************************** #******************************************************************
...@@ -330,7 +327,7 @@ class Stats: ...@@ -330,7 +327,7 @@ class Stats:
print filename print filename
if self.files: print if self.files: print
indent = ' ' * 8 indent = ' ' * 8
for func in self.top_level.keys(): for func in self.top_level:
print indent, func_get_function_name(func) print indent, func_get_function_name(func)
print indent, self.total_calls, "function calls", print indent, self.total_calls, "function calls",
...@@ -468,20 +465,20 @@ def add_func_stats(target, source): ...@@ -468,20 +465,20 @@ def add_func_stats(target, source):
def add_callers(target, source): def add_callers(target, source):
"""Combine two caller lists in a single list.""" """Combine two caller lists in a single list."""
new_callers = {} new_callers = {}
for func in target.keys(): for func, caller in target.iteritems():
new_callers[func] = target[func] new_callers[func] = caller
for func in source.keys(): for func, caller in source.iteritems():
if func in new_callers: if func in new_callers:
new_callers[func] = source[func] + new_callers[func] new_callers[func] = caller + new_callers[func]
else: else:
new_callers[func] = source[func] new_callers[func] = caller
return new_callers return new_callers
def count_calls(callers): def count_calls(callers):
"""Sum the caller statistics to get total number of calls received.""" """Sum the caller statistics to get total number of calls received."""
nc = 0 nc = 0
for func in callers.keys(): for calls in callers.itervalues():
nc += callers[func] nc += calls
return nc return nc
#************************************************************************** #**************************************************************************
...@@ -595,19 +592,19 @@ if __name__ == '__main__': ...@@ -595,19 +592,19 @@ if __name__ == '__main__':
print "Reverse the sort order of the profiling report." print "Reverse the sort order of the profiling report."
def do_sort(self, line): def do_sort(self, line):
abbrevs = self.stats.get_sort_arg_defs().keys() abbrevs = self.stats.get_sort_arg_defs()
if line and not filter(lambda x,a=abbrevs: x not in a,line.split()): if line and not filter(lambda x,a=abbrevs: x not in a,line.split()):
apply(self.stats.sort_stats, line.split()) apply(self.stats.sort_stats, line.split())
else: else:
print "Valid sort keys (unique prefixes are accepted):" print "Valid sort keys (unique prefixes are accepted):"
for (key, value) in Stats.sort_arg_dict_default.items(): for (key, value) in Stats.sort_arg_dict_default.iteritems():
print "%s -- %s" % (key, value[1]) print "%s -- %s" % (key, value[1])
return 0 return 0
def help_sort(self): def help_sort(self):
print "Sort profile data according to specified keys." print "Sort profile data according to specified keys."
print "(Typing `sort' without arguments lists valid keys.)" print "(Typing `sort' without arguments lists valid keys.)"
def complete_sort(self, text, *args): def complete_sort(self, text, *args):
return [a for a in Stats.sort_arg_dict_default.keys() if a.startswith(text)] return [a for a in Stats.sort_arg_dict_default if a.startswith(text)]
def do_stats(self, line): def do_stats(self, line):
return self.generic('print_stats', line) return self.generic('print_stats', line)
......
...@@ -324,7 +324,7 @@ def readmodule_ex(module, path=[], inpackage=0): ...@@ -324,7 +324,7 @@ def readmodule_ex(module, path=[], inpackage=0):
# Python does internally) # Python does internally)
# also don't add names that # also don't add names that
# start with _ # start with _
for n in d.keys(): for n in d:
if n[0] != '_' and \ if n[0] != '_' and \
not n in dict: not n in dict:
dict[n] = d[n] dict[n] = d[n]
......
...@@ -104,8 +104,8 @@ class Completer: ...@@ -104,8 +104,8 @@ class Completer:
matches = [] matches = []
n = len(text) n = len(text)
for list in [keyword.kwlist, for list in [keyword.kwlist,
__builtin__.__dict__.keys(), __builtin__.__dict__,
self.namespace.keys()]: self.namespace]:
for word in list: for word in list:
if word[:n] == text and word != "__builtins__": if word[:n] == text and word != "__builtins__":
matches.append(word) matches.append(word)
......
...@@ -163,7 +163,7 @@ class Class(SymbolTable): ...@@ -163,7 +163,7 @@ class Class(SymbolTable):
d = {} d = {}
for st in self._table.children: for st in self._table.children:
d[st.name] = 1 d[st.name] = 1
self.__methods = tuple(d.keys()) self.__methods = tuple(d)
return self.__methods return self.__methods
class Symbol: class Symbol:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment