Как мне создать функцию, которая создаст глобальное (и присвоит ему значение) с именем, которое содержит имя данного аргумента? - PullRequest
0 голосов
/ 12 октября 2011

Я использую Python и пытаюсь создать функцию, которая будет смотреть на имя объекта, заданного в качестве аргумента, и (среди прочего) создавать некоторые глобальные переменные, содержащие это имя, например:

object1=someclass(args,kwds) #the object is an instance of a class that is given a certain name (e.g.object1)
def somefunc(some_argument):
   global tau_some_argument
   global ron_some_argument    #e.t.c. for other variables (I also would like to assign some variables etc)
   tau_some_argument=some_value1
   ron_some_argument=some_value2
   print ron_some_argument
   print tau_some_argument

Теперь то, что я хочу получить, если я вызову эту функцию, выглядит следующим образом: когда я вызываю

 somefunc(object1)

, я хотел бы, чтобы он создал несколько глобалов с именами tau_object1, ron_object1 и назначил им значения (операторы печати не имеют значения), аналогично, если бы я вызвал

somefunc(object2)

, где object2 - это еще один экземпляр класса, я бы хотел, чтобы он создавал глобальные переменные: tau_object2, ron_object2, на данный момент функция просто создает глобальные переменные с именем tau_some_argument(как видно из кода).

Теперь я где-то читал, что имена объектов Python неизменны, если только они не являются классом или функцией, поэтому я не знаю, как это сделать, читая, я получаюощущение, что мне может понадобиться использовать мета-классы, но такое ощущение, что это слишком сложный способ сделать что-то, чтодолжно быть относительно легко.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 12 октября 2011

Это звучит как ужасная идея ...

def func(prefix):
    g = globals()
    g[prefix + '_tomato'] = 123
    g[prefix + '_broccoli'] = 456

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

0 голосов
/ 12 октября 2011

Я не очень уверен насчет python, но разве вы не можете просто объявить глобальный массив и просто создать объект, проиндексированный по имени объекта в виде строки?

tau_some_argument['object1'] = some_value1
ron_some_argument['object1'] = some_value2
...