Предлагается добавить синтаксис для значений по умолчанию, вычисляемых прямо перед выполнением функции (late-bound function argument defaults). Грубо говоря, можно будет в качестве дефолтного значения указать лямбда-функцию из одного выражения, в которой будут доступны все предыдущие аргументы. Это позволит более компактно выражать зависимости между аргументами.
Например, вместо вот такого:
# Very common: Use None and replace it in the functionМожно будет написать вот такое:
def bisect_right(a, x, lo=0, hi=None, *, key=None):
if hi is None:
hi = len(a)
...
def bisect_right(a, x, lo=0, hi=>len(a), *, key=None):Если при вызове аргумент
...
hi передан, то дефолтное значение не нужно, ничего не происходит. Если же аргумент не передан, то дефолтное значение будет вычислено прямо перед выполнением функции на основе другого аргумента. Вычисление дефолтного значения происходит в пространстве имён функции, поэтому другие аргументы уже должны быть определены и доступны для использования.Можно указывать несколько аргументов с такими динамическими дефолтными значениями. Они будут выполнены в порядке определения слева направо. Каждый аргумент может ссылаться на любые предыдущие аргументы, но не на следующие после него.
Это пока что всего-лишь черновик на ранней стадии, и далеко не факт, что это изменение будет принято в язык.
#pep