Как сделать строку, преобразованную в имя переменной, инстанцированной внутри функции global? - PullRequest
0 голосов
/ 14 января 2019

Извините за этот запутанный заголовок, в моей функции мой параметр - это имя, которое я хочу установить в качестве имени глобальной переменной. Я могу сделать это вне функции, и я могу создать глобальную переменную без строки в качестве имени, и я не нашел никаких других статей, которые бы одновременно решали обе проблемы.

def myFunc(varName):
    temp = varName
    # global vars()[temp]  <== This line produces the error
    vars()[temp] = 5  # varName becomes a local variable

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Вы можете использовать функцию globals для достижения этой цели:

def set_global_var(name, value):
    globals()[name] = value


if __name__ == '__main__':
    set_global_var('foo', 3)
    print(foo)

Обратите внимание, что в большинстве случаев это не очень хорошая идея. Возможно, вы захотите использовать глобальный dict объект и просто назначить ему новые ключи.

0 голосов
/ 14 января 2019

Используя global, вот так (обратите внимание, что some_text неизвестен до вызова fun1):

def fun1():
    global some_text
    some_text = "1234"

def fun2():
    print(some_text)

fun1()
fun2()

Это дает 1234, как и следовало ожидать, см. демо на ideone.com .


Итак, в вашем случае просто перейдите на
def myFunc(varName):
    global TEMP
    TEMP = varName

Остается вопрос: зачем вам это делать? Не загромождайте свое глобальное пространство имен переменными, которые нужны только классу / функции.

...