cse 130 : winter 2009 programming languages lecture 11: what’s in a name ?
DESCRIPTION
Key data structure: Dictionaries Associative arrays, Hash tables … A table storing a set of “keys”, And a “value” for each key. Any (immutable) object can be a key! int,float,string,tuples… Very useful!TRANSCRIPT
![Page 1: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/1.jpg)
CSE 130 : Winter 2009
Programming Languages
Lecture 11: What’s in a Name ?
![Page 2: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/2.jpg)
Today: Revisit some objects • Exploit features and build powerful
expressionsBase: int, float, complex
Sequence: string, tuple, list
Maps (Dictionary): key ! value
![Page 3: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/3.jpg)
Key data structure: DictionariesAssociative arrays, Hash tables …
A table storing a set of “keys”,And a “value” for each key.
Any (immutable) object can be a key!• int,float,string,tuples…
Very useful!
![Page 4: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/4.jpg)
Using DictionariesUnsorted list of key,value pairs
Empty Dictionary: {}
Non-empty Dictionary: {k1:v1,k2:v2,…}
Membership: is k in dict: k in d
Lookup value of key: d[k]
Set value of key: d[k]=v
![Page 5: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/5.jpg)
Dictionaries>>> d={}>>> d=dict(mexmenu)>>> d[“ceviche”] = 3.95>>> d{…}>>> d[“burrito”]3.50>>> d.keys()…>>> d.values()
![Page 6: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/6.jpg)
Dictionariesdef freq(s):
d={} for c in s: if c in d: d[c]+=1 else: d[c]=1 return d
>>> d=plotfreq([1,1,3.0,”A”,3.0,”A”,”A”,1,2,3.0,1,”A”])>>> d…>>> d = plotfreq(“avrakedavra”)>>> d.keys()>>> d…
def plotfreq(s):d=freq(s)
for k in d.keys():print k, “*”*d[k]
![Page 7: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/7.jpg)
You now know enough to do PA6• Python Tutorial: How to open files, read
lines• Use the help command• Document every function: What does it
do ?
>>> f = open(“foo.txt”,”read”)>>> f.readlines()… >>> for l in f.readlines():
<BODY>
>>> f.close
![Page 8: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/8.jpg)
![Page 9: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/9.jpg)
Next: What’s in a name ?More precisely: • How should programmer think of
data• What does a variable “x” really mean
?
![Page 10: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/10.jpg)
What’s in a name ?
ML (or Functional Languages)• Name refers to a Value• Binding maps Names to Values• Environment list of bindings• Environment can be extended • Environment can’t be changed
![Page 11: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/11.jpg)
Data model in functional PL• Vars = names in phonebook• Evaluation = Most recent• Environment “frozen” in function
value – behavior of function cannot be changed – easier reasoning
![Page 12: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/12.jpg)
Data model in OO langs• Variables “point to” objects
• Objects = boxes with data inside
X “pumpkin”
Y 3.142
Z [1,2,3]
![Page 13: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/13.jpg)
Namespaces • Manage variable names in Python
• Similar to, but different from Environments– Core PL concept, unifies many ideas
• We will see very important differences
![Page 14: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/14.jpg)
Ok, but what IS a namespace ?A mapping from names to objects
X “pumpkin”
Y 3.142
Z [1,2,3]
![Page 15: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/15.jpg)
Namespaces vs. EnvironmentsBoth are maps from variables to something
Namespace Environment
What’s the difference ?1.Assignment2.Updates/Mutation
![Page 16: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/16.jpg)
1. AssignmentBasic operation in Imperative PL:
x = e
1.Compute object corresponding to e2.Change the name “x” to refer to
object
![Page 17: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/17.jpg)
Simple example
i,s = 0,0while (i <= 3): i,s = i+1, s+i
Same name “s” - points to different objects- namespace is not extended
![Page 18: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/18.jpg)
1. AssignmentBasic operation in Imperative PL:x = e
1.Compute object corresponding to e2.Change the name “x” to refer to object
Assignment: changes box that name refers to
![Page 19: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/19.jpg)
2. Update/MutationChange what’s inside the box (object)- Not with immutable objects
- eg. integers - But with mutable objects
- eg. tuples, arrays, lists, dictionaries
>>> x = [100,200]>>> x[100, 200]>>> x[0] = "gobble gobble">>> x['gobble gobble', 200]
How is it different from“build a new box with updated value inside” ?
![Page 20: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/20.jpg)
AliasingTwo or more names refer to same
object
“Peter Parker”
“Spider-Man”
![Page 21: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/21.jpg)
AliasingTwo or more names refer to same
object X [100,200]
Y>> x = [100,200]>> y = x
![Page 22: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/22.jpg)
Aliasing and UpdateTwo or more names refer to same
object X [100,200]
Y>> x = [100,200]>> y = x>> x = [100,200]>> y = x
>> y[0] = “gobble gobble">> x
[‘gobble…’,200]
![Page 23: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/23.jpg)
AliasingTwo or more names refer to same
object X [100,200]
Y>> x = [100,200]>> y = x>> x = [100,200]>> y = x
>> y[0] = “gobble gobble">> x
>> x = [100,200]>> y = x
>> y[0] = “gobble gobble">> x[‘gobble gobble’,200]
If multiple names refer to same object,update affects values of all names
[‘gobble…’,200]
![Page 24: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/24.jpg)
AliasingDoes not happen in Ocaml/Functional PLs• actually it does happen (where ?)• but not exposed to the (130)
programmer
Does happen in every imperative PL• Java, Python: names point to objects• C: names point to memory cells
![Page 25: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/25.jpg)
AliasingGood because ?
Bad because ?
![Page 26: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/26.jpg)
Namespaces everywhereNamespace = map from names to objects
Notion of namespace pervades Python
• Can create namespace,• Can name a namespace,• Can peep inside a namespace (see whats bound)
Go to code!
![Page 27: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/27.jpg)
Creating Namespaces
x = 22y = “this sentence is false”
x = “pumpkin”y = 3.142
a.py
b.py
X 22
Y “this…”
a
X “pumpkin”
Y 3.142 b>>> import a>>> a.x22
![Page 28: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/28.jpg)
NamespacesX
“22 pumpkins”
Y “this…”
a
X
Y 3.142 b
Different names can point to same object!
![Page 29: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/29.jpg)
NamespacesX 22
Y “this…”
a
X “pumpkin”
Y 3.142 b
For two namespaces a , b:• names inside unrelated• names in different spacesa.x :attribute/name “x” in space
“a” b.x :attribute/name “x” in space
“a” Different names can point to same object!
![Page 30: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/30.jpg)
Creating Namespaces: Fun Callsx = 10
def f(y): y = y + x return y
f(x)
X 10
globals
f <fun>
y 20
Call-by-Value:• New local namespace for call• y bound to same object (value) as arg x• x binding unchanged by callIn this case, after call, local namespace disappears…
f(x)
![Page 31: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/31.jpg)
Creating Namespaces: Fun Callsx = 10
def f(y): y = y + x return y
f(x)
X 10
globals
f <fun>
y 20
Questions:• Why “new local namespace” (not just stack) ? • What’s the deal with “x” not declared/bound in “f” ?• When do we need to freeze a namespace ?
f(x)
![Page 32: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/32.jpg)
Creating Namespaces: Fun Calls 2y = 0x = [10]
def f(y): z = len(x)+y return z
f(5)
len <fun>
builtins
<fun>
y 0
x 20
f
globals
y 5
f(5)z 6
Static ScopingLookup at runtimeNot compile timeMissing z added
![Page 33: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/33.jpg)
Creating Namespaces: Fun Calls 3>>> def g(y): >>> return y + n>>> g(5)…NameError: global name 'n' is not defined
What happened ?Looks for “n” at run-time ,when “g” is
calledCan’t find “n” in local, global, builtins Throws run-time error…
![Page 34: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/34.jpg)
Creating Namespaces: Fun Calls 3>>> def g(y): >>> return y + n>>> g(5)NameError… >>> n = 10>>> g(5)15What happened ?Looks for “n” at run-time ,when “g” is
calledFinds “n” in global, returns 15Here “n” is a “free variable” of “g”Needs to be “bound” in some enclosing
scope
![Page 35: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/35.jpg)
Aaargh!
Changed behavior after definition
whether or not fun works depends
on what we did after fundef
>>> def g(y): >>> return y + n>>> g(5)NameError… >>> n = 10>>> g(5)15
>>> def g(y): >>> return y + n>>> g(5)NameError… >>> n = 10>>> g(5)15>>> n = 100>>> g(5)105
Change I/O behavior too …Unlike ML, no new binding:just change what “n” is bound
tobe careful with free variables!
![Page 36: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/36.jpg)
Python tries to avoid “overwrites”
Python tries to ensure you don’t overwrite outer variables
>>> n100 >>> def f():>>> n = “smash” >>> print n>>>>>> f()smash>>> n
>>> n100 >>> def f():>>> n = “smash” >>> print n>>>>>> f()smash>>> n100
![Page 37: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/37.jpg)
Python tries to avoid “overwrites”
How ?- unlike C/Java- assignment different from
reads - no variable “declarations”- assignment = declaration!
>>> n100 >>> def f():>>> n = “smash” >>> print n>>>>>> f()smash>>> n
>>> n100 >>> def f():>>> n = “smash” >>> print n>>>>>> f()smash>>> n100
Python tries to ensure you don’t overwrite outer
variables
![Page 38: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/38.jpg)
Assignment Revisited
x = e
1.Compute object corresponding to e2.Change the name “x” to refer to
object in the current namespace (added if missing)
Python tries to avoid “overwrites”
![Page 39: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/39.jpg)
Python tries to avoid “overwrites”>>> n100 >>> def f():>>> n = “smash” >>> print n>>>>>> f()smash>>> n100
![Page 40: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/40.jpg)
What happens ?>>> x = 10>>> def g():>>> x = x + 1>>> print x>>>>>> g()>>> x
![Page 41: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/41.jpg)
What happens ?>>> x = 10>>> def g():>>> global x>>> x = x + 1>>> print x>>>>>> g()>>> x
![Page 42: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/42.jpg)
What happens ?>>> x = [10]>>> def g():>>> x[0] = “abc”>>> print x>>>>>> g()>>> x
![Page 43: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/43.jpg)
What happens ?>>> x = [10]>>> def g():>>> x[0] = “abc”>>> print x>>>>>> g()>>> x
![Page 44: CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?](https://reader034.vdocuments.site/reader034/viewer/2022051405/5a4d1b657f8b9ab0599aff9a/html5/thumbnails/44.jpg)
What happens ?>>> x = [10]>>> def f(y):>>> def h(z):>>> return (y+x[0]+z) >>> return h>>>>>> foo = f(5)>>> foo<function object>>>> foo(100)>>> 115>>> foo1 = f(-5)>>> foo1(100)105