Безусловно, лучший подход, как говорят другие ответы, состоит в том, чтобы избежать этого очень, очень плохого дизайна: просто не используйте одни и те же имена для двух разных вещей!
Если вы заперты в этом ужасном проекте, возможно, потому что Верховный Архитектор вашей компании принял решение об этом, и он просто не подлежит обсуждению (например, есть тонны кода клиента, полагающегося на имена как глобального, так и параметра), первый бизнес для вас - убедиться, что ваше резюме актуально, распечатать его на лучшем принтере и начать общаться с членами вашей социальной сети, чтобы найти работу в месте, которое работает более разумно; Затем, чтобы не потерять медицинскую страховку, пока не найдете лучшую работу, попробуйте
def myfunc(somevar = None):
if somevar is None:
print globals().get('somevar')
else:
print somevar
Я также переименовал ваш mufunc
в myfunc
, потому что это имя, с которым он называется (хотя, учитывая невероятно плохой замысел, ваш гипотетический Верховный Архитектор, кажется, способен выполнить, возможно, он также указывал, что функция вызывается не так, как определено с помощью имени? Похоже, что это сопровождается систематическим конфликтом имен, который, как предполагается, этот гипотетический, но уже довольно ненавистный парень навязал вам! -).