Python函数无法访问全局变量?

时间:2020-04-12 15:34:29

标签: python function scope global

我熟悉Java和JS等其他语言,并且刚学过Python,这让我感到困惑:

upper_case = 0
lower_case = 0

s = "Hello"

def upper_lower(s):
    for c in s:
        if c.islower():
            lower_case += 1
        elif c.isupper():
            upper_case += 1
    print(upper_case, lower_case)

但是我总是遇到错误UnboundLocalError: local variable 'upper_case' referenced before assignment “分配前的参考”是什么意思?但是我已经在全局变量之前声明了这个变量?

4 个答案:

答案 0 :(得分:2)

您可以做到

s = "Hello"

def upper_lower(s):
    upper_case = 0
    lower_case = 0
    for c in s:
        if c.islower():
            lower_case += 1
        elif c.isupper():
            upper_case += 1
    print(upper_case, lower_case)

或如global关键字所述

答案 1 :(得分:0)

在函数内部,您需要使用global关键字。

upper_case = 0
lower_case = 0

s = "Hello"

def upper_lower(s):
    global upper_case
    global lower_case
    for c in s:
        if c.islower():
            lower_case += 1
        elif c.isupper():
            upper_case += 1
    print(upper_case, lower_case)

答案 2 :(得分:0)

您必须添加全局

upper_case = 0
lower_case = 0

s = "Hello"

def upper_lower(s):

    global upper_case
    global  lower_case

    for c in s:
        if c.islower():
            lower_case += 1
        elif c.isupper():
            upper_case += 1
    print(upper_case, lower_case)


upper_lower(s)

结果

1 4

答案 3 :(得分:0)

该错误是因为您尝试执行以下操作:lower_case += 1,与lower_case = lower_case +1相同。由于lower_case没有初始值,因此无法执行此操作。解决方法是添加以下两行:

    upper_case = 0
    lower_case = 0

您应该这样做:

upper_case = 0
lower_case = 0

s = "Hello"

def upper_lower(s):
    upper_case = 0
    lower_case = 0
    for c in s:
        if c.islower():
            lower_case += 1
        elif c.isupper():
            upper_case += 1
    print(upper_case, lower_case)

upper_lower(s)