Python: 在函数中调用未定义变量 - 但却能工作?
我刚接触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
语句来确认)。这两个返回的值分别被赋值给这两个变量。