Python: 在函数中调用未定义变量 - 但却能工作?

1 投票
2 回答
2961 浏览
提问于 2025-04-17 12:56

我刚接触Python,正在查看一段不是我写的代码。

有人能解释一下为什么在check_arguments这个函数里可以使用变量"clean"的第一次出现吗?我觉得它好像是在调用一个还没有定义的变量。代码是能运行的,但难道调用"clean"不应该报错吗?

为了更清楚,我指的是这部分。

def check_arguments(ages):
    clean, ages_list = parse_ages_argument(ages)

完整的代码如下...

def check_arguments(ages):
    clean, ages_list = parse_ages_argument(ages)
    if clean != True:
        print('invalid ages: %s') % ages
    return ages_list

def parse_ages_argument(ages):
    clean = True
    ages_list = []
    ages_string_list = ages.split(',')
    for age_string in ages_string_list:
        if age_string.isdigit() != True:
            clean = False
            break
    for age_string in ages_string_list:
        try:
            ages_list.append(int(age_string))
        except ValueError:
            clean = False
            break

    ages_list.sort(reverse=True)
    return clean, ages_list

ages_list = check_arguments('1,2,3')
print(ages_list)

2 个回答

7

Python 里没有逗号运算符。你看到的其实是 序列解包

>>> a, b = 1, 2
>>> print a, b
1 2
0

为什么在check_arguments函数中可以调用变量"clean"的第一个实例?

首先,这个问题本身就有点奇怪,因为变量是不能被调用的,只有函数可以被调用。而且,“实例”通常是指某个类类型的值,而不是代码中某个东西的出现。

不过,关于这行代码,它并没有使用一个未定义的变量clean。实际上,它是定义了这个变量clean(同时也定义了ages_list)。parse_ages_argument这个函数会返回两个值(你可以通过查看它的return语句来确认)。这两个返回的值分别被赋值给这两个变量。

撰写回答