Изменение содержимого переменной, переданной функции в Python. Синтаксический сахар для создания ссылки из переменной?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Изменение содержимого переменной, переданной функции в Python. Синтаксический сахар для создания ссылки из переменной?

Сообщение Anonymous »

Можно ли как-нибудь переформатировать

Код: Выделить всё

def alterContents(dictionary,key):
dictionary[key]="foobar"
myVar="hello"
alterContents(globals(),"myVar")
print(myVar)
разрешить изменять содержимое myVar, передавая функции только один аргумент? Что-то вроде:

Код: Выделить всё

def alterContents(variable):
variable="foobar" #psuedo code that would change the contents of the variable fed into it, in a similar manner to how you can set the data at memory address in most programming languages (for example, via "references" in C++).
myVar="hello"
alterContents(myVar)
print(myVar) # would print "foobar"
Или другими словами: я ищу способ создания указателя на любую абстрактную переменную (где я не контролирую, как и где эта переменная создается и хранится (хотя, поскольку Python кажется чтобы хранить все в dict(), я полагаю, можно было бы с некоторой уверенностью предположить, что это так)).
Для моего реального варианта использования также просто возвращение новое значение, позволяющее вызывающему функцию впоследствии присвоить переменную, не будет работать, поскольку мой реальный эквивалент alterContents на самом деле не изменяет содержимое самой переменной, а скорее сохраняет «ссылку/указатель» для использования другими механизмами в более позднее время.
Очевидным решением может быть что-то вроде:

Код: Выделить всё

class Pointer:
def __init__(self,dictionary,varName) -> None:
self.dictionary=dictionary
self.varName=varName
@property
def value(self):
return self.dictionary[self.varName]
@value.setter
def value(self,val):
self.dictionary[self.varName]=val

def alterContents(variable):
variable.value="foobar" #psuedo code that would change the contents of the variable fed into it, in a similar manner to how you can set the data at memory address in most programming languages (for example, via "references" in C++).
myVar="hello"
alterContents(Pointer(globals(),'myVar'))
print(myVar) # would print "foobar"
Но на самом деле я просто делаю то же самое, что и в моем первом примере, и статические анализаторы языка (например, PyLance) не смогут следовать этой ссылке (что означает, что такие операции, как переименование переменных, будут не работает для строки, которую я ввожу во второй параметр Pointer.__init__).
Будем очень благодарны за любые мысли/идеи/ссылки/информацию.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ntactic-su
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Int.TryParse синтаксический сахар
    Гость » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Гость
  • Понимание списков C# = чистый синтаксический сахар?
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Почему выражение лямбды не просто синтаксический сахар функтора?
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Почему выражение лямбды не только синтаксический сахар функтора?
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Почему выражение лямбды не только синтаксический сахар функтора?
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»