Консенсус заключается в использовании словаря для этого - см. другие ответы. Это хорошая идея для большинства случаев, однако есть много аспектов, связанных с этим:
Тем не менее, я реализовал variable variables manager -класс, который предоставляет некоторые из вышеперечисленных идей. Он работает для python 2 и 3.
Вы использовали бы класс следующим образом:
from variableVariablesManager import VariableVariablesManager
myVars = VariableVariablesManager()
myVars['test'] = 25
print(myVars['test'])
# define a const variable
myVars.defineConstVariable('myconst', 13)
try:
myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
print("not allowed")
except AttributeError as e:
pass
# rename a variable
myVars.renameVariable('myconst', 'myconstOther')
# preserve locality
def testLocalVar():
myVars = VariableVariablesManager()
myVars['test'] = 13
print("inside function myVars['test']:", myVars['test'])
testLocalVar()
print("outside function myVars['test']:", myVars['test'])
# define a global variable
myVars.defineGlobalVariable('globalVar', 12)
def testGlobalVar():
myVars = VariableVariablesManager()
print("inside function myVars['globalVar']:", myVars['globalVar'])
myVars['globalVar'] = 13
print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
testGlobalVar()
print("outside function myVars['globalVar']:", myVars['globalVar'])
Если вы хотите разрешить переписывание переменных с помощью только тот же тип:
myVars = VariableVariablesManager(enforceSameTypeOnOverride = True)
myVars['test'] = 25
myVars['test'] = "Cat" # <- raises Exception (different type on overwriting)
Разница должна быть более четкой, если вы смотрите на поведение каждого, когда вы передаете ему Iterable
(например, List
):
Observable.just(someList)
даст вам 1 эмиссию - a List
.
Observable.from(someList)
даст вам выбросы N - каждый элемент в списке.
Возможность передавать несколько значений в just
является удобной функцией; следующие функционально одинаковы:
Observable.just(1, 2, 3);
Observable.from(1, 2, 3);
Разница между just()
и from()
:
Все, хотя just()
и from()
, похоже, выполняют одну и ту же работу, она отличается количеством выбросов.
just()
- Делает только 1 эмиссию. Observable.just(new Integer[]{1, 2, 3})
делает одно излучение с обратным вызовом наблюдателя как onNext(Integer[] integers)
fromArray()
- производит выбросы N. Observable.fromArray(new Integer[]{1, 2, 3})
делает три излучения с обратным вызовом наблюдателя как onNext(Integer integer)