2015-10-06 2 views
1

Во-первых, вот мой пример кода:Изменение локальной переменной в функции из другой функции

EDIT: Я должен был указан, в моем реальном коде, that_func() уже возвращая значение, поэтому я хочу его возвращать одно значение, и изменение с в дополнение

EDIT 2: Код отредактирован, чтобы показать, что я имею в виду

def this_func(): 
    c=1 # I want to change this c 
    d=that_func() 
    print(c, d) 

def that_func(): 
    this_func.c=2 #Into this c, from this function 
    return(1000) #that_func should also return a value 

this_func() 

То, что я хочу сделать, это изменить локальную переменную с в т his_func() к значению Поручаю его в that_func(), так что она печатает 2 вместо 1.

Из того, что я собрал в интернете, this_func.c = 2 должен делать только это, но он не работает. Я что-то делаю неправильно или неправильно понял?

Спасибо за любую помощь.

+0

' this_func' - это функция, а не класс. 'c' является локальной переменной для этой функции - если бы это был класс, это работало бы, как ваш вопрос. Но это требует некоторых изменений в том, как вы делаете вещи. – whrrgarbl

ответ

0

Заверните его в объект и передать его that_func:

def this_func(): 
    vars = {'c': 1} 
    d = that_func(vars) 
    print vars['c'], d 

def that_func(vars): 
    vars['c'] = 2 
    return 1000 

В качестве альтернативы, вы можете передать его в качестве обычной переменной и that_func может возвращать несколько значений:

def this_func(): 
    c = 1 
    c, d = that_func(c) 
    print c, d 

def that_func(c): 
    c = 2 
    return c, 1000 
1

Да, вы неправильно поняли.

functions не class. Вы не можете получить доступ к переменным function.

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

def this_func(): 
    c=1 # I want to change this c 
    c=that_func(c) # pass c as parameter and receive return value in c later 
    print(c) 

def that_func(b): # receiving value of c from this_func() 
    b=2 # manipulating the value 
    return b #returning back to this_func() 

this_func() 
+0

Прошу прощения, я должен был указать в своем реальном коде, что this_func() уже возвращает другое значение, поэтому я хочу, чтобы он возвращал одно значение и менял c к тому же. Я отредактировал вопрос. – Matsern

+0

Вы всегда можете вернуть более одного значения и распаковать их позже. Это нормально? –

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