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

Python functions don't have access to global variable?

我熟悉 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 "references before assignment" 是什么意思?但是我已经在全局之前声明了这个变量??

在函数内部,需要使用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)

您必须添加全局

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

该错误是因为您正在尝试执行以下操作: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)

你可以做到这一点

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关键字所述