为什么多次运行时“总”值不会更新?

时间:2018-09-20 13:48:40

标签: python python-2.7 return-value

“总计”会在我第一次运行该函数时发生更改,但不会返回total的新值,所以当我再次运行它时,它与我第一次运行该函数之前的值相同吗?

total = card[1].value

def hit(total):
    #print (str(hit.counter))
    print("You draw the " + string(card[hit.counter]))
    total = total + card[hit.counter].value
    print(str(total))
    hit.counter += 1
    return hit.counter
    return total

该函数在这里调用:

choice = raw_input("\n1. Hit\n2. Stay\n")
    if (choice == "1"):
        hit(total)

这是简化的相同问题

x = 1
def call(x):
    x = x + 1
    print x
    return x
call(x)

每次运行都会输出2,并且不会更新“ x = x + 1”的新值

3 个答案:

答案 0 :(得分:1)

您有一个名为total的全局变量。您还具有一个名为total的局部变量。

当您使用该函数时,局部total遮盖外部全局变量,因此,对函数内部total的更新将仅更新局部变量。

答案 1 :(得分:1)

  

这是简化的相同问题

x = 1
def call(x):
    x = x + 1
    print x
    return x
call(x)

然后?你能指望什么 ?全局x将在最后一行之后自动更新吗?对不起,但这不是它的工作原理。在call()中,x是本地名称,与外部全局x完全无关。当您致电call(x)时。如果要更新全局x,则必须明确地重新绑定它:

def call(x):
    x = x + 1
    print x
    return x

x = 1
x = call(x)

我强烈建议您阅读以下内容:https://nedbatchelder.com/text/names.html

编辑:

  

“我想要它,所以当我第二次运行hit()函数时,总数就是我上次使用它的总数”

将总数存储在某个地方并在下一次调用时将其传递回去是您的责任(我指的是调用此函数的代码的责任)。

# Q&D py2 / py3 compat:
try: 
    # py2
    input = raw_input
except NameError:
    # py3
    pass 

def call(x):
    x = x + 1
    print(x)
    return x


x = 1
while True:
    print("before call, x = {}".format(x))
    x = call(x)
    print("after call, x = {}".format(x))
    if input("play again ? (y/n)").strip().lower() != "y":
        break

答案 2 :(得分:0)

total = card[1].value

def hit(total):
    print("You draw the " + string(card[hit.counter]))
    total += card[hit.counter].value
    hit.counter += 1
    return hit.counter, total

hit_counter, total = hit(total)

正如bazingaa所建议的那样,您没有获得总回报。如果您要返回多个值,则可以按照上述步骤进行操作,并按上面所示的方式在分配中使用它们。