function call questions

chenyong20000 at gmail.com chenyong20000 at gmail.com
Wed Oct 19 22:36:37 EDT 2016


在 2016年10月19日星期三 UTC+8下午3:17:18,Peter Otten写道:
> chenyong20000 at gmail.com wrote:
> 
> > 在 2016年10月19日星期三 UTC+8上午11:46:28,MRAB写道:
> >> On 2016-10-19 03:15, chenyong20000 at gmail.com wrote:
> >> > Thanks Peter and Anssi for your kind help. Now I'm ok with the first
> >> > question. But the second question still confused me. Why "it seems that
> >> > after root = root.setdefault(ch,{}) tree['a'] and root are the same
> >> > object" and follows tree['a']['b']? Thanks.
> >> >
> >> You call the .setdefault method with a key and a default value.
> >> 
> >> The .setdefault method does this: if the key is in the dict, it returns
> >> the associated value, else it puts the key and the default into the dict
> >> and then returns the default.
> > 
> > thanks for the reply. I understand this. I'm now confused on why tree got
> > its magic result.
> 
> Perhaps it is easier to understand if you rewrite the function without 
> setdefault()?
> 
> def add_to_tree(root, value_string):
>     print "root is %s, value_string is %s" % (root, value_string)
>     for ch in value_string:
>         print "ch is %s" % ch
>         if ch not in root: # always true if the root arg is an empty dict
>             root[ch] = {}
>         root = root[ch] # inside the function the inner dict becomes the new
>                         # root
>         print "root is", root
>         print "tree is", tree

please forgive my stupid. I still can't follow this.



More information about the Python-list mailing list