如何在没有global,self,python的每个函数调用中保留值

时间:2014-07-14 13:51:19

标签: python

这个问题在面试中被问到, 定义应满足3个案例的函数

case 1:set initial balance
case 2:deduct the amount and return balance
case 3:should add amount to balance and return current balance 

条件: 1.不要使用全局变量 2.不要使用自我(没有上课的意思) 3.不要使用文件或类似的东西

所以我定义了像

这样的函数
def fun1(amt,reset=None):
    if reset:
            fun1.balance = reset
    fun1.balance = fun1.balance-amt
    return fun1.balance

print fun1(0,500)#will set balance 500
print fun1(200) #will deduct amount 200 and return balance 300
print fun1(0,400)#should add 400 to balance and return 700

所以我想在每个函数调用时保持平衡值 在上面的情况 FUN1(0,500) fun1(200)效果很好 但如何将代码修改为第三种情况fun1(0,400)返回true结果

陷入第三种情况,这将更新余额......

2 个答案:

答案 0 :(得分:2)

你快到了。对于金额,使用负数来扣除和要添加的正数。您也可以使用零来查询余额:

def transact(amount, reset=None):
    if reset:
        transact.balance = reset
    transact.balance = transact.balance + amount
    return transact.balance

print transact(0, 500) # will set balance 500
print transact(-200)   # will deduct amount 200 and return balance 300
print transact(400)    # add 400 to make 700

我不确定这是面试官的想法,但它确实有效。

答案 1 :(得分:0)

我使用了异常处理

def fun1(amt,reset=None):
    if reset:
        try:
            fun1.balance += reset
        except:
            fun1.balance = reset

    fun1.balance = fun1.balance-amt
    return fun1.balance

现在它工作正常,但不知道有多可行......

print fun1(0,500)#will set balance 500
print fun1(200) #will deduct amount 200 and return balance 300
print fun1(0,400)#should add 400 to balance and return 700