This preview shows page 1-2-3-4-5-6-7-8-9-10-11-12-80-81-82-83-84-85-86-87-88-89-90-162-163-164-165-166-167-168-169-170-171-172-173 out of 173 pages.
61A Lecture 11Friday, September 23Friday, September 23, 2011A Function with Behavior That Varies Over Time2Let's model a bank account that has a balance of $100Friday, September 23, 2011A Function with Behavior That Varies Over Time2>>> withdraw(25)Let's model a bank account that has a balance of $100Argument:amount to withdrawFriday, September 23, 2011A Function with Behavior That Varies Over Time2>>> withdraw(25)75Let's model a bank account that has a balance of $100Argument:amount to withdrawReturn value:remaining balanceFriday, September 23, 2011A Function with Behavior That Varies Over Time2>>> withdraw(25)75>>> withdraw(25)Let's model a bank account that has a balance of $100Argument:amount to withdrawSecond withdrawal of the same amountReturn value:remaining balanceFriday, September 23, 2011A Function with Behavior That Varies Over Time2>>> withdraw(25)75>>> withdraw(25)50Let's model a bank account that has a balance of $100Argument:amount to withdrawSecond withdrawal of the same amountReturn value:remaining balanceDifferentreturn value!Friday, September 23, 2011A Function with Behavior That Varies Over Time2>>> withdraw(25)75>>> withdraw(25)50>>> withdraw(60)Let's model a bank account that has a balance of $100Argument:amount to withdrawSecond withdrawal of the same amountReturn value:remaining balanceDifferentreturn value!Friday, September 23, 2011A Function with Behavior That Varies Over Time2>>> withdraw(25)75>>> withdraw(25)50>>> withdraw(60)'Insufficient funds'Let's model a bank account that has a balance of $100Argument:amount to withdrawSecond withdrawal of the same amountReturn value:remaining balanceDifferentreturn value!Friday, September 23, 2011A Function with Behavior That Varies Over Time2>>> withdraw(25)75>>> withdraw(25)50>>> withdraw(60)'Insufficient funds'>>> withdraw(15)Let's model a bank account that has a balance of $100Argument:amount to withdrawSecond withdrawal of the same amountReturn value:remaining balanceDifferentreturn value!Friday, September 23, 2011A Function with Behavior That Varies Over Time2>>> withdraw(25)75>>> withdraw(25)50>>> withdraw(60)'Insufficient funds'>>> withdraw(15)35Let's model a bank account that has a balance of $100Argument:amount to withdrawSecond withdrawal of the same amountReturn value:remaining balanceDifferentreturn value!Friday, September 23, 2011A Function with Behavior That Varies Over Time2>>> withdraw(25)75>>> withdraw(25)50>>> withdraw(60)'Insufficient funds'>>> withdraw(15)35Let's model a bank account that has a balance of $100Argument:amount to withdrawSecond withdrawal of the same amountReturn value:remaining balanceDifferentreturn value!Where's this balance stored?Friday, September 23, 2011A Function with Behavior That Varies Over Time2>>> withdraw(25)75>>> withdraw(25)50>>> withdraw(60)'Insufficient funds'>>> withdraw(15)35>>> withdraw = make_withdraw(100)Let's model a bank account that has a balance of $100Argument:amount to withdrawSecond withdrawal of the same amountReturn value:remaining balanceDifferentreturn value!Where's this balance stored?Friday, September 23, 2011A Function with Behavior That Varies Over Time2>>> withdraw(25)75>>> withdraw(25)50>>> withdraw(60)'Insufficient funds'>>> withdraw(15)35>>> withdraw = make_withdraw(100)Let's model a bank account that has a balance of $100Argument:amount to withdrawSecond withdrawal of the same amountReturn value:remaining balanceDifferentreturn value!Where's this balance stored?Within the function!Friday, September 23, 2011Persistent Local State3Friday, September 23, 2011Persistent Local State3withdraw(amount):function body to be revealedmomentarilyFriday, September 23, 2011Persistent Local State3withdraw(amount):function body to be revealedmomentarilybalance: 100withdraw:make_withdrawFriday, September 23, 2011Persistent Local State3withdraw(amount):function body to be revealedmomentarilymake_withdraw:withdraw:make_withdraw(balance):function body to be revealedmomentarilybalance: 100withdraw:make_withdrawFriday, September 23, 2011Local State via Non-Local Assignment4Friday, September 23, 2011Local State via Non-Local Assignment4 def make_withdraw(balance):Friday, September 23, 2011Local State via Non-Local Assignment4 def make_withdraw(balance): """Return a withdraw function with a starting balance."""Friday, September 23, 2011Local State via Non-Local Assignment4 def make_withdraw(balance): """Return a withdraw function with a starting balance.""" def withdraw(amount):Friday, September 23, 2011Local State via Non-Local Assignment4 def make_withdraw(balance): """Return a withdraw function with a starting balance.""" def withdraw(amount): nonlocal balance Friday, September 23, 2011Local State via Non-Local Assignment4 def make_withdraw(balance): """Return a withdraw function with a starting balance.""" def withdraw(amount): nonlocal balance Declare the name "balance" nonlocalFriday, September 23, 2011Local State via Non-Local Assignment4 def make_withdraw(balance): """Return a withdraw function with a starting balance.""" def withdraw(amount): nonlocal balance if amount > balance:Declare the name "balance" nonlocalFriday, September 23, 2011Local State via Non-Local Assignment4 def make_withdraw(balance): """Return a withdraw function with a starting balance.""" def withdraw(amount): nonlocal balance if amount > balance: return 'Insufficient funds'Declare the name "balance" nonlocalFriday, September 23, 2011Local State via Non-Local Assignment4 def make_withdraw(balance): """Return a withdraw function with a starting balance.""" def withdraw(amount): nonlocal balance if amount > balance: return 'Insufficient funds' balance = balance - amountDeclare the name "balance" nonlocalFriday, September 23, 2011Local State via Non-Local Assignment4 def make_withdraw(balance): """Return a withdraw function with a starting balance.""" def withdraw(amount): nonlocal balance if amount > balance: return 'Insufficient funds' balance = balance - amountDeclare the name "balance" nonlocalRe-bind balance where it was bound previouslyFriday, September 23, 2011Local State via Non-Local Assignment4 def make_withdraw(balance): """Return a withdraw function with a starting balance.""" def withdraw(amount): nonlocal balance if amount > balance: return 'Insufficient funds' balance = balance - amount return balanceDeclare the name "balance" nonlocalRe-bind balance where it was bound
View Full Document