Будущий оператор Python from __future__ import feature
обеспечивает отличный способ облегчить переход на новые языковые функции. Возможно ли реализовать аналогичную функцию для библиотек Python: from myproject.__future__ import feature
?
Простое задание констант модуля в инструкции импорта. Что для меня не очевидно, так это то, как вы могли бы обеспечить, чтобы эти константы не распространялись на код, выполняемый в импортированных модулях, - они также должны требовать будущего импорта, чтобы включить новую функцию.
Это недавно появилось в обсуждении возможных изменений индексации в NumPy. Я не ожидаю, что он действительно будет использоваться в NumPy, но я вижу, что он полезен для других проектов.
В качестве конкретного примера предположим, что мы хотим изменить, как работает индексирование в некоторой будущей версии NumPy. Это было бы несовместимым с обратным изменением, поэтому мы решили использовать будущее выражение для облегчения перехода. A script с использованием этой новой функции выглядит примерно так:
import numpy as np
from numpy.__future__ import orthogonal_indexing
x = np.random.randn(5, 5)
print(x[[0, 1], [0, 1]]) # should use the "orthogonal indexing" feature
# prints a 2x2 array of random numbers
# we also want to use a legacy project that uses indexing, but
# hasn't been updated to the use the "orthogonal indexing" feature
from legacy_project import do_something
do_something(x) # should *not* use "orthogonal indexing"
Если это невозможно, то чем ближе мы можем получить для включения локальных опций? Например, можно написать что-то вроде:
from numpy import future
future.enable_orthogonal_indexing()
Использование чего-то вроде диспетчера контекста будет хорошо, но проблема в том, что мы не хотим распространять параметры для вложенных областей:
with numpy.future.enable_orthogonal_indexing():
print(x[[0, 1], [0, 1]]) # should use the "orthogonal indexing" feature
do_something(x) # should *not* use "orthogonal indexing" inside do_something