Python: пока еще не определена переменная, вызываемая в функции - но работает? - PullRequest
1 голос
/ 13 февраля 2012

Я все еще новичок в Python и проверяю следующий код, написанный не мной.

Может кто-нибудь объяснить, как можно вызвать первый экземпляр переменной "clean" в функции check_arguments? Мне кажется, что он вызывает еще неопределенную переменную. Код работает, но не должен ли этот вызов "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 голосов
/ 13 февраля 2012

В Python нет оператора запятой.Вы видите последовательность распаковки .

>>> a, b = 1, 2
>>> print a, b
1 2
0 голосов
/ 13 февраля 2012

как можно вызвать первый экземпляр переменной "clean" в функции check_arguments?

Это бессмысленная вещь, которую нужно задавать, поскольку переменныене называются;функции есть.Кроме того, «экземпляр» обычно означает «значение, имеющее некоторый тип класса», а не «вхождение рассматриваемой вещи в листинг кода».

Тем не менее, строка кода, о которой идет речь, не используетнеопределенная переменная clean.Он определяет переменную cleanages_list одновременно).parse_ages_argument возвращает два значения (как вы можете увидеть, проверив его оператор return).Два возвращаемых значения присваиваются двум переменным соответственно.

...