Если это только одна функция, в которой происходит столкновение имен, вы всегда можете повторно импортировать модуль в пределах области действия и переименовать его, чтобы избежать двусмысленности.
import m
def f(m=None):
import m as the_real_m
if m is None:
k = the_real_m.M()
m
в import m as the_real_m
может быть немного запутанным, но здесь это не ссылка на переменную, так что нет никаких проблем с его разрешения на неправильные вещи.
Лично я предпочел бы переименовать аргумент функции, но я понимаю, что с аргументами ключевого слова имя аргумента может быть частью интерфейса, находящегося в других частях системы, и сохранить это с максимально понятным именем может быть больше важный.
и что, если вы хотите передать что-то еще функции? это нехорошее решение. – mata
, то вы передаете его, и оно переопределяет значение DEFAULT в определении функции. –
№. привязка модуля к параметру в качестве значения по умолчанию, чтобы иметь возможность использовать его в функции, просто не то, что вы делаете. попробуйте объяснить этот параметр кому-либо, используя ваш модуль. единственная причина, по которой это нужно сделать, - это желание, если вы захотите пройти в другом объекте, чтобы изменить функцию. – mata