2016-12-06 4 views
5

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

Очевидный вариант сделать следующее:

global a,b,c,d,e,f,g...... 
a=1 
b=2 
c=3 
d=4 
..... 

Это упрощенный пример, но в основном мне нужно определить десятки глобальных переменных, основанных на входе определенной функции. В идеале я хотел бы позаботиться о том, чтобы определить глобальное имя и значение без необходимости независимо изменять значение и определять глобальное имя.

Чтобы добавить более ясность.

Ищу питона эквивалент этого (JavaScript):

var a = 1 
    , b = 2 
    , c = 3 
    , d = 4 
    , e = 5; 
+2

Нет, вам не нужно это делать. Это совершенно неправильный способ сделать почти что угодно. Вам необходимо просмотреть списки, словари, функции и возвращаемые значения. – TigerhawkT3

+0

Существует __very__, безусловно, способ написать свой код без единого глобального. –

+1

@ TigerhawkT3 Я полностью согласен, проблема здесь в редактировании очень плохо написанного проекта.Переписать его, хотя и было бы большим количеством усилий, поэтому я застрял между камнем и жестким местом и, по сути, просто пытался придумать решение, учитывая мои ограничения. Которые являются определяющими значениями глобальных переменных изнутри функции. –

ответ

2

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

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

class globalBS(): 
    bsA = "F" 
    bsB = "U" 

теперь вы можете называть их, изменять их и т.д. в любой другой функции, ссылок на них, как, например:

print(globalBS.bsA) 

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

Надеюсь, что это поможет!

-1

Если они концептуально связаны один вариант, чтобы иметь их в словаре:

global global_dictionary 
global_dictionary = {'a': 1, 'b': 2, 'c': 3} 

Но, как это было прокомментировал ваш вопрос, это не лучший подход для решения проблемы, породившей этот вопрос.

+0

Во-первых, глобалы - это неправильный путь. Во-вторых, словари являются изменяемыми и могут быть мутированы без переназначения. – TigerhawkT3

+0

@Martinbaste, я рассмотрел этот метод, но тогда он требует редактирования всего кода, который уже вызывает глобальные переменные. –

-1

Встроенная функция globals() относится к глобальным переменным в текущем модуле. Вы можете использовать его точно так же, как обычный словарь

globals()['myvariable'] = 5 
print(myvariable) # returns 5 

Повторите это для всех переменных.

Однако, вы, безусловно, не должны делать это

+0

'globals()', вероятно, еще хуже, чем использование 'global'. – TigerhawkT3

+0

как он мог использовать 'global' во время выполнения для определения переменных с неизвестными именами и значениями, поступающими с пользовательского ввода? –

Смежные вопросы