1

Вопрос по scope, cython, local – Почему Cython вызывает объявление местных жителей в начале функции

Это было задано в качестве комментария вCython - копировать конструкторы.

Следующий код не компилируется в Cython:

def bar(int i):
    if i == 0:
        return i
    else:
        cdef int j
        j = i+1
        return j

тогда как этот совершенно правильно:

def foo(int i):
    cdef int j
    if i == 0:
        return i
    else:
        j = i+1
        return j

Вопрос в том, почему Cython заставляет заявлятьj в начале функции, а не вelse блок?

1 ответ
2

Причина в том, что в Python vs C / C ++ есть правило.

Cython пытается получить лучшее из мира Python и C / C ++. Но есть некоторые несовместимости между этими двумя мирами. Правило обобщения одно.

В C / C ++ область действия локальной переменной - от точки, в которой она была объявлена, до конца самого внутреннего блока, где она была объявлена.В Python переменная считается локальной в функции, если она назначена где-то в функции. Затем его можно использовать где угодно внутри функции.

Чтобы исправить эти два правила, разработчики Cython решили, что объявление локальных переменных разрешено только в начале функции.

Похожие вопросы