I am newbie who can explain this code to me?

380162267qq at gmail.com 380162267qq at gmail.com
Tue Sep 20 09:32:52 EDT 2016


在 2016年9月20日星期二 UTC-4上午9:13:35,Peter Otten写道:
> 380162267qq at gmail.com wrote:
> 
> > 在 2016年9月20日星期二 UTC-4上午8:17:13,BartC写道:
> >> On 20/09/2016 13:12, 380162267qq at gmail.com wrote:
> >> >>>> d = {}
> >> >>>> keys = range(256)
> >> >>>> vals = map(chr, keys)
> >> >>>> map(operator.setitem, [d]*len(keys), keys, vals)
> >> >
> >> > It is from python library. What does [d]*len(keys) mean?
> >> > d is the name of dict but put d in [] really confused me.
> >> >
> >> 
> >> if len(keys) is 5 then [d]*5 is:
> >> 
> >>     [d,d,d,d,d]
> >> 
> >> [d] is a list, containing one item, a dict if that is what it is.
> >> 
> >> --
> >> Bartc
> > 
> > Thank you. I understand now
> 
> It should be noted that the code above is really bad Python.
> Better alternatives are the simple loop
> 
> d = {}
> for i in range(256):
>      d[i] = chr(i)
> 
> or the dict comprehension
> 
> d = {i: chr(i) for i in range(256)}
> 
> and even
> 
> keys = range(256)
> d = dict(zip(keys, map(chr, keys)))
> 
> because they don't build lists only to throw them away. 
> 
> 
> Also, creating a list of dicts or lists is a common gotcha because after
> 
> outer = [[]] * 3
> 
> the outer list contains *the* *same* list three times, not three empty 
> lists. Try
> 
> outer[0].append("surprise")
> print(outer)
> 
> in the interactive interpreter to see why the difference matters.
> 
> 
> Finally, if you are just starting you might consider picking Python 3 
> instead of Python 2.

Thank you.I learn more!



More information about the Python-list mailing list