2015-12-12 6 views
-1

Как можно получить значение Accessme в функции mainloop?Доступ к переменной внутри функции из другой функции? python

def example(): 
    test=True 
    while test: 
     print("some stuff") 
     if test2==True: 
      Accessme = 400     # Need to access this 
      print("some stuff") 
      if test3==True: 
       print("some stuff") 
       mainloop(x,y) 
     elif test2==False: 
      print("some stuff") 

def mainloop(x,y): 
    cheese = 1 
    noise = [] 
    for something in somecodehere: 
     print("some stuff") 
    output = some more code here 
    print("some stuff",Accessme)   #Calling from here 

Это ошибка, я получаю:

> NameError: name 'Accessme' is not defined 
+1

Любая причина, по которой вы не можете передать переменную в качестве аргумента в 'mainloop' (каким образом это сделать)? – MatsLindh

+0

да. Код имеет вид как вещь меню. И значение Accessme генерируется тем, что пользователь вводит, используя эту опцию меню. Подобно case-switch. Это не может быть сделано по-другому. –

+0

Я думаю, что точка @MatsLindh состояла в том, что вы могли добавить третий параметр в 'mainloop' и передать ему Accessme' в этом параметре. –

ответ

3

Вашего пример код был грязным, чтобы слова с так что я упростил достаточно, чтобы вы понимаете концепцию:

def example(): 
    test=True 
    while test: 
     Accessme = 400 #Assign the variable 
     break 
    return Accessme #This will return the variable. Accessme is local to the function example and nowhere else. 

def mainloop(x=0,y=0): 
    cheese = 1 
    noise = [] 
    print("some stuff",example()) #You can grab the output from example by calling the function example, not Accessme. 

mainloop() 

Я советую вам прочитать на Scope. Ваша проблема: Accessme не входит в сферу mainloop.

+0

И чтобы добавить глобальные переменные, как правило, представляют собой плохую практику, я не советую вам использовать их, если вам явно не нужно, например, : установив такую ​​константу, как G = 9.81, потому что здесь, на Земле, по крайней мере, насколько нам известно, эта постоянная силы тяжести не изменится. – abe

1

Если вы хотите получить доступ к Accessme быть глобальным (то есть, вне какой-либо конкретной функции), то вам необходимо указать каждую функцию, что это в этом случае:

global Accessme 

Использование глобалов обычно в плохом стиле. Если вы хотите получить информацию из функции, было бы лучше вернуть эту информацию, так же как получение информации в функцию лучше всего сделать с помощью параметра.

+0

Спасибо! Я думаю, это то, что мне нужно. Попробуй сейчас. Кроме того, я уже пытался реализовать его, чтобы Accessme вернул значение. Но я все равно получаю ту же ошибку. –

+0

'Accessme' - переменная; он не может * вернуть * ничего. –

+0

Я понимаю это. Это псевдокод. С рабочим кодом значение Accessme выводится через возврат функции, которая принимает два параметра. –

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