Короче говоря, вопрос: Есть ли способ предотвратить Python от поиска переменных за пределами текущей области?
Подробнее:
Python ищет определения переменных во внешних областях, если они не определены в текущей области. Таким образом, код, подобный этому, может сломаться, если не быть осторожным во время рефакторинга:
def line(x, a, b):
return a + x * b
a, b = 1, 1
y1 = line(1, a, b)
y2 = line(1, 2, 3)
Если я переименовал аргументы функции, но забыл переименовать их внутри тела функции, код все равно будет выполняться:
def line(x, a0, b0):
return a + x * b # not an error
a, b = 1, 1
y1 = line(1, a, b) # correct result by coincidence
y2 = line(1, 2, 3) # wrong result
Я знаю Плохая практика теневых имен из внешних областей. Однако есть несколько причин, почему это делается в любом случае:
- Иногда может иметь смысл иметь одинаковые имена, потому что они относятся к одной и той же вещи
- Возможно, закончились значащие имена переменных
- лени
Есть ли способ предотвратить Python от поиска переменных за пределами текущей области? (Чтобы доступ к a
или b
вызывал ошибку во втором примере.)
Из-за лени, я бы предпочел решение, которое работает без повторного кода котельной:)
Если проблема неоднозначна с точки зрения версии Python, меня в основном интересует Python 3.3 и выше.