2011-03-10 3 views
1

Я хочу сделать следующее питона:Learning Python: переменная печать внутри функции из другой функции

def func1(): 
var1 = "something" 

def func2(): 
print var1 

Что такое правильный способ сделать это? Я вообще не нашел в документации

PS. Если возможно, это не мой план сделать эту переменную «var1» глобальной.

Спасибо.

ответ

5

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

class C: 
    def func1(self): 
    self.var1 = "something" 

    def func2(self): 
    print self.var1 

foo = C() 
foo.func1() 
foo.func2() 
+0

Спасибо за ответ! –

+0

Теперь это сработало для меня ... Я создал класс, который вы написали, и я могу «видеть» и работать с этой переменной! –

0

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

  • Возвращает значение var1 при вызове func1 (например Защиту func2(). Печать func1()}
  • Вызов func2 из func1 и передать значение var1
3

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

+1

Вы не можете определить область действия. Лексический обзор запрещает это. Dynamic * scoping * - это все об этом (сделать местные звонящие доступными для вызова). – delnan

+0

Спасибо за ответ! –

0

Вы могли бы попробовать что-то вроде

def func1(): 
    var1 = "something" 
    return var1 

def func2(): 
    print func1() 

Если вам нужно func1, чтобы делать больше вещей, чем просто определить var1, то, возможно, вам нужно определить класс и создать объекты? См. http://docs.python.org/tutorial/classes.html

+0

Спасибо за ответ! –

0

Вы можете попробовать:

filename.py:


def func1(): 
    var1 = "something" 

def func2(): 
    var = __ import__('filename').var1 
    print var 
Смежные вопросы