2013-04-27 2 views
2

Это, вероятно, странно, но я хотел бы объявить переменную без фиксированного значения, но «связанным» каким-то образом с результатом функции. Цель заключается в том, чтобы конечный пользователь манипулировал переменной, но каждый раз, когда используется значение переменной, ее значение может измениться.Значение переменной определяется вызовом функции

Это текущий результат я получаю:

from random import randint 

def randomfun(): 
    return randint(1, 100) 

an_int = randomfun 
print an_int # Print the function object 
print an_int() # Print the result of randomfun() 

То, что я хотел бы получить это print an_int на самом деле назвать randomfun(), но без добавления скобки, и тип an_int должен быть randomfun «s возвращаемый тип.

+0

Я не понимаю вопрос. Чтобы объявить переменную без значения, вы объявляете ее как None. «связанный» каким-то образом бессмыслен, трудно понять, что вы подразумеваете под этим. Вы можете манипулировать переменной из области действия без каких-либо проблем. Если вы хотите иногда менять переменную, а не иначе, вам нужна абстракция (метод доступа). Вы пытаетесь заставить его иметь 50% шанс называть randfun и 50% шанс изменить стоимость? – Dmitry

+0

Извините, я неправильно понимаю. –

+1

Вы, наверное, знаете это, но встреча с такой переменной, как в программе, может привести к некоторым ДЕЙСТВИТЕЛЬНО расстраивающим сеансам отладки. – Medo42

ответ

4

an_int - объект. Он не изменит свою стоимость, если вы не измените ее. Тем не менее, вы можете изменить способ представления объекта:

from random import randint 

class RandomFun(object): 
    def __str__(self): 
     return str(randomfun()) 

def randomfun(): 
    return randint(1, 100) 

an_int = RandomFun() 
print an_int  
print an_int  

урожайности (что-то подобное)

57 
19 
+0

+1: Очень умный. Есть ли способ использовать 'an_int' как целое число? – Blender

+0

Умное решение и соответствует тому, что GuillaumeA явно просило, но может не соответствовать тому, что ему действительно нужно. – Medo42

+0

@Blender: Я не могу использовать подкласс 'int', поскольку' int 'неизменны. – unutbu

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