Вы можете сделать это с with
, но я не думаю, что это стоит. В основном (в функции python) у вас есть две области - глобальная или локальная, вот и все. Если вы хотите, чтобы у символа была продолжительность жизни короче, чем функция, которую вы должны будете удалить после этого, используя del
.Вы можете определить свой собственный менеджер контекста, чтобы это произошло:
class TempVar:
def __init__(self, loc, name, val):
self.loc = loc
self.name = name
self.val
def __enter__(self):
if self.name in self.loc:
self.old = self.loc[self.name]
self.loc[self.name] = self.val
def __exit__(self, *exc):
if hasattr(self, "old"):
self.loc[self.name] = self.old
else:
del self.loc[self.name]
, то вы можете использовать его, чтобы получить временную переменную:
with TempVar(locals(), "tempVar", 42):
print(tempVar)
Рабочим является то, что он изменяет dict
, содержащие локальные переменные (которые поставляется конструктору через locals()
) при входе и восстановлении его при выходе. Обратите внимание, что это зависит от того, что изменение результата, возвращаемого locals()
, фактически изменяет локальное пространство имен - спецификация НЕ гарантирует это поведение.
Другая (и более безопасная) альтернатива, которая была указана, заключается в том, что вы можете определить отдельную функцию, которая будет иметь свой собственный охват. Помните, что законно устанавливать функции. Например:
def outer():
def inner(tempVar):
# here tempVar is in scope
print(tempVar)
inner(tempVar = 42)
# here tempVar is out of scope
Со встроенным не работает таким образом. Почему вы не делаете phonemes = pronounciation.split(), а затем, если вам действительно нужно делать del фонем в конце? – muddyfish